В макросе EXCEL я хочу скопировать выбранный диапазон в таблицу документов WORD.Я знаю, как это сделать, создав новый WORD-документ (цель).Но я хочу проверить, существуют ли уже открытые WORD-документы, из которых я могу выбрать цель.
Я нашел код для циклического прохождения всех открытых EXCEL-приложений из макроса EXCEL.Я изменил код из Флоран Брехере , как указано ниже.
Какие имена классов отсутствуют, обозначенные "???"в коде искать WORD-документы?
Заранее спасибо!Иммануил
Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" ( _
ByVal hwnd As LongPtr, ByVal dwId As Long, riid As Any, ppvObject As Object) As Long
Private Declare PtrSafe Function FindWindowExA Lib "user32" ( _
ByVal hwndParent As LongPtr, ByVal hwndChildAfter As LongPtr, _
ByVal lpszClass As String, ByVal lpszWindow As String) As LongPtr
'Test my code
Private Sub GetWordInstances_Test()
Dim wd As Word.Application
Dim i, cnt As Integer
cnt = 0
For Each wd In GetWordInstances()
cnt = cnt + 1
Debug.Print wd.Application.Name, cnt
For i = 1 To wd.Documents.Count
Debug.Print wd.Documents(i).FullName, i
Next i
Next
End Sub
'Getting open WORD instances from within EXCEL-VBA
Public Function GetWordInstances() As Collection
Dim guid&(0 To 3), acc As Object, hwnd, hwnd2, hwnd3
guid(0) = &H20400
guid(1) = &H0
guid(2) = &HC0
guid(3) = &H46000000
Set GetWordInstances = New Collection
Do
hwnd = FindWindowExA(0, hwnd, "OpusApp", vbNullString)
If hwnd = 0 Then Exit Do
hwnd2 = FindWindowExA(hwnd, 0, "???", vbNullString)
hwnd3 = FindWindowExA(hwnd2, 0, "???", vbNullString)
'hand over found WORD application to collection
If AccessibleObjectFromWindow(hwnd3, &HFFFFFFF0, guid(0), acc) = 0 Then
GetWordInstances.Add acc.Application
End If
Loop
End Function