Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как проверить открыт ли в Excele нужный файл

10K
06 июля 2007 года
NaeR
6 / / 06.04.2005
Нужно узнать открыт ли в Excele нужный мне файл или нет. Если открыт то активизировать его и работать с ним. А вообще даже не знаю как проверить запущен ли сам Excel.

Проблема в том, что vba крутится под другим приложением, хотя наверно это не проблема.
18K
06 июля 2007 года
pavel55
79 / / 14.05.2007
Я бы сделал бы так

Код:
Sub Макрос1()
    Dim WB As Workbook
    Dim myWorkBook As String
   
    myWorkBook = "Бюджет.xls" 'задаём имя искомой книги
    On Error Resume Next
        Windows(myWorkBook).Activate
    If Err.Number = 9 Then
        MsgBox "Книга " & myWorkBook & " не открыта!", , ""
    End If
    On Error GoTo 0
End Sub


или так

Код:
Sub Макрос2()
    Dim WB As Workbook
    Dim myWorkBook As String
   
    myWorkBook = "Бюджет.xls" 'задаём имя искомой книги
    For Each WB In Application.Workbooks
        If WB.Name = myWorkBook Then
            Windows(WB.Name).Activate
            End
        End If
    Next
    If ActiveWorkbook.Name <> myWorkBook Then MsgBox "Книга " & myWorkBook & " не открыта!", , ""
End Sub
10K
09 июля 2007 года
NaeR
6 / / 06.04.2005
первый вариант работает на ура, но проблемы начинаются после нескольких программных пусков excel'я и ручных закрытий. потом он перестаёт его видеть и начинает постоянно открывать новые копии книги. со вторым вариантом дело обстоит также.

пробовал на двух машинах 2k sp4 и xp sp2. excel 2003(11).
31K
12 июля 2007 года
migor69
1 / / 09.07.2007
dim EX as Excel.Application
Dim WB As Workbook
....................................
...............................
открытие книги...
......работа
закрытие и сохранение книги
EX.Quit..Закрытие Excel ............Иначе книга остается открытой
15K
16 июля 2007 года
vkodor
41 / / 04.07.2006
 
Код:
Public Function WorkbookIsOpen(wbname) As Boolean
    'проверка открыт фаил или нет
    Dim x
    On Error Resume Next
    Set x = Workbooks(wbname)
    If Err = 0 Then WorkbookIsOpen = True
    Set x = Nothing
End Function
10K
19 июля 2007 года
NaeR
6 / / 06.04.2005
проблема в том что всеми этими способами я не вижу была ли открыта книга до того как была запущена моя программа. а это очень важно т.к. книга повторно откроется только для чтения, а мне надо писать в неё данные каждые 2 часа. запретить открывать книгу я тоже не могу т.к. она может быть нужна для просмотра данных.

может есть какие другие способы, через winapi или еще как, чтобы можно было 100% определить открыта ли книга и если да то писать в неё
6.4K
19 июля 2007 года
Host
122 / / 22.09.2005
Цитата: NaeR
проблема в том что всеми этими способами я не вижу была ли открыта книга до того как была запущена моя программа...



Проверяй на существование экземпляр Excel.

Код:
Function CheckWorksheet(strName As String) As Boolean
 
   On Error Resume Next
   Dim pExcel As Excel.Application
   'Получаем объект
   Set pExcel = GetObject(class:="Excel.Application")
 
   If Not pExcel Is Nothing Then
      Dim wb As Workbook
 
      'Проверяем наличие открытой книги
      Set wb = pExcel.Workbooks(strName)
      If Not wb Is Nothing Then
         CheckWorksheet = True
      Else
         CheckWorksheet = False
      End If
      Exit Function
   End If
   CheckWorksheet = False
End Function
10K
20 июля 2007 года
NaeR
6 / / 06.04.2005
Host спасибо! похоже твой вариант работает. я уже было чуть не отчаялся
10K
21 июля 2007 года
NaeR
6 / / 06.04.2005
Host можешь объяснить какая разница между твоим примером и остальными, почему твой работает а предыдущие нет. хотя по логике вещей работать должны все примеры
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог