Проверьте, открыт ли определенный файл 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, который был запущен первым. Вам нужно будет прервать этот экземпляр, чтобы иметь возможность присоединиться к следующему (см. Здесь). Однако, поскольку по умолчанию книги открываются в уже запущенном экземпляре, вышеописанное должно работать для большинства сценариев.

Другие вопросы по тегам