--------- Изменить после комментария Рему ---------
Новый код:
Sub test()
Dim myInspectors As Outlook.Inspectors
Dim x As Integer
Dim iCount As Integer
Set myInspectors = Application.Inspectors
iCount = Application.Inspectors.Count
If iCount > 0 Then
For x = 1 To iCount
'check for message only
If InStr(1, myInspectors.Item(x).Caption, "Message (HTML)") > 0 Then
' MsgBox myInspectors.Item(x).EntryID
MsgBox myInspectors.Item(x).Caption
End If
Next x
Else
MsgBox "No inspector windows are open."
End If
End Sub
Тем не менее, некоторые оговорки:
- Я не нашел способа получить доступ к исходному объекту инспектора (т.е. к сообщению), чтобы проверить, является ли это сообщение
- Я также не нашел способа доступа к EntryID (потому что это свойство сообщения, а не свойство инспектора).
Спасибо Remou за то, что он указал на некоторые отличные советы (извините, я попробовал свои знания Outlook VBA).
-------- Оригинальный ответ --------
Вот способ перебрать все окна Windows Outlook:
Option Explicit
Declare Function EnumWindows Lib "user32" (ByVal lpFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Public Function EnumWindProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
Dim strTitle As String
Dim lngTemp As Long
strTitle = String(255, 0)
lngTemp = GetWindowText(hWnd, strTitle, 255)
If InStr(1, Left(strTitle, lngTemp), "Message (HTML)") > 0 Then
lngOutlookHWnd = hWnd
MsgBox (strTitle)
End If
EnumWindProc = 1
End Function
Public Sub GetOutlookHWnd()
EnumWindows AddressOf EnumWindProc, 0
End Sub
Адаптировано с этой темы
Тем не менее, вам все равно нужно найти способ сохранить сообщение (можно использовать EntryID, как предложено Рему), чтобы открыть его потом.
Пожалуйста, дайте нам знать, если вы найдете полное рабочее решение.