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
Как проверить открыт ли в Excele нужный файл
Проблема в том, что vba крутится под другим приложением, хотя наверно это не проблема.
Код:
или так
Код:
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
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
пробовал на двух машинах 2k sp4 и xp sp2. excel 2003(11).
Dim WB As Workbook
....................................
...............................
открытие книги...
......работа
закрытие и сохранение книги
EX.Quit..Закрытие Excel ............Иначе книга остается открытой
Код:
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
'проверка открыт фаил или нет
Dim x
On Error Resume Next
Set x = Workbooks(wbname)
If Err = 0 Then WorkbookIsOpen = True
Set x = Nothing
End Function
может есть какие другие способы, через winapi или еще как, чтобы можно было 100% определить открыта ли книга и если да то писать в неё
Цитата: 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
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
Host спасибо! похоже твой вариант работает. я уже было чуть не отчаялся
Host можешь объяснить какая разница между твоим примером и остальными, почему твой работает а предыдущие нет. хотя по логике вещей работать должны все примеры