Я пытаюсь создать сценарий VBA в экземпляре A для копирования базовых элементов в экземпляр B Word, созданный программой уровня с временным и непредсказуемым именем, поэтому я не могу использовать GetObject (Path,) чтобы получить этот экземпляр с путем, потому что у меня его нет.
Мое временное решение - PowerShell, выполняющий эту команду из экземпляра A, чтобы получить имя всех Windows с «Word» в заголовке.... и сохранить его в переменной VBA, чтобы определить, является ли имя другим экземпляром, отличным от экземпляра A:
Get-Process |Where-Object {$_.mainWindowTitle -like "*Word*"} |format-table mainwindowtitle
Это работает, но я не могу поверить, что нет способа обнаружить все запущенные экземплярыприложения непосредственно из VBA, даже с неизвестным путем.
Я пытался безобразно, как это, в VBA, чтобы безуспешно пересекать различные экземпляры:
Sub GetAllInstance()
Dim WordApp As Word.Application, wordInstance As Object
Set WordApp = GetObject(, "Word.Application")
For Each wordInstance In WordApp
MsgBox (wordInstance)
Next wordInstance
End Sub
И Немедленная команда показывает мне, чтоGetObject имеет информацию только о моем экземпляре A, в результате чего только 1 документ открывается, даже если открыто 3 экземпляра:
?WordApp.Documents.Count
1
EDIT20/02:
С хорошими советами Синди я изменил свой подход, пытаясь работать с процессом, я успешно обнаружил различные PID моих запущенных экземпляров с кодом ниже:
Sub IsProcessRunning()
Dim process As String
Dim objList As Object
Dim xprocess As Variant
Dim wdApp As Word.Application
process = "Word.exe"
Set objList = GetObject("winmgmts:") _
.ExecQuery("select ProcessID from win32_process where name='" & process & "'")
For Each xprocess In objList
Debug.Print xprocess.ProcessID
AppActivate (xprocess.ProcessID)
Set wdApp = GetObject(, "Word.Application")
Debug.Print wdApp.Workbooks(1).Name
Next xprocess
End Sub
К сожалению, при активации приложения не удаляется ROT, сейчас я пытаюсь найти способ очистить его и обновить его, чтобы зарегистрировать новое активированное приложение в ROT и использовать GetObject с хорошим экземпляром.