Проверьте, открыт ли определенный файл Excel, когда открыто несколько файлов Excel, и активируйте его.
Редактировать: Прежде чем поместить конкретный файл Excel или его окно на передний план, мне нужно проверить, работает ли он / все еще открыт.
Старый вопрос: я хочу установить конкретное окно Excel на передний план.
С помощью этого кода VBScript я могу активировать одно окно Excel по его имени. Но поскольку открыто более одного окна Excel, оно больше не работает. В этом случае оно не найдет нужное окно и не может быть проверено, открыто ли оно. Так что всегда будет сказано, что ExcelFileName не открыт.
Set WshShell = WScript.CreateObject ("WScript.Shell")
if WshShell.AppActivate(ExcelFileName) = True then
wscript.echo ExcelFileName & " is opened."
WshShell.sendkeys "%x" 'in Excel 2003 this would had opened the extra-menu-droplist of the menu-bar. Now it just activates Excel.
else
wscript.echo ExcelFileName & " is not open."
End if
Как я могу заставить его работать с более чем одним открытым окном Excel?
1 ответ
Итак, вы хотите определить, открыта ли рабочая книга с заданным именем? Это можно сделать так в VBScript:
ExcelFileName = "some.xlsx"
On Error Resume Next
Set xl = GetObject(, "Excel.Application") 'attach to running Excel instance
If Err Then
If Err.Number = 429 Then
WScript.Echo "Workbook not open (Excel is not running)."
Else
WScript.Echo Err.Description & " (0x" & Hex(Err.Number) & ")"
End If
WScript.Quit 1
End If
On Error Goto 0
Set wb = Nothing
For Each obj In xl.Workbooks
If obj.Name = ExcelFileName Then 'use obj.FullName for full path
Set wb = obj
Exit For
End If
Next
If wb Is Nothing Then
WScript.Echo "Workbook not open."
WScript.Quit 1
End If
GetObject
однако можно прикрепить только к экземпляру Excel, который был запущен первым. Вам нужно будет прервать этот экземпляр, чтобы иметь возможность присоединиться к следующему (см. Здесь). Однако, поскольку по умолчанию книги открываются в уже запущенном экземпляре, вышеописанное должно работать для большинства сценариев.