Dim Outlook As Object
Set Outlook = CreateObject("Outlook.Application")
Dim oInspector As Inspector
Dim olOutMail As MailItem
Если ваш код компилируется, то у вас есть ссылка на объектную модель Outlook, а идентификатор Outlook
ссылается на библиотеку типов Outlook
: Dim Outlook As Object
равно отслеживание этой декларации.Переименуйте его и явно квалифицируйте типы с помощью библиотеки, из которой они:
Dim outlookApp As Outlook.Application
Set outlookApp = New Outlook.Application
Dim outlookInspector As Outlook.Inspector
Dim outlookMail As Outlook.MailItem
Я не смог выяснить согласованную схему для вашего префикса, поэтому я отбросил ее.
Теперькогда вы назначаете ссылку для инспектора:
Set oInspector = Outlook.ActiveInspector
Это неоднозначно, по крайней мере для читателя-человека: если вы набираете IntelliSense при вводе этой .
точкитогда VBA понимает Outlook
как Outlook.Application
, и это означает проблему, поскольку теперь у вас есть неявная Application
ссылка , которая не является примером, с которым вы хотите работать ... и который можеточень хорошо, почему вы получаете эту ошибку.
Вы хотите устранить неоднозначность.
Set outlookInspector = outlookApp.ActiveInspector
Это должно дать вам ссылку Inspector
, с которой вы собираетесь работать.
Следующая проблема заключается в том, что вы устанавливаете olOutMail
ссылку на объект при условии, что есть активный инспектор, и что вы смотрите на MailItem
- ожидайте возгорания, если любое из предположений не соответствует действительности.
If Not outlookInspector Is Nothing Then
If TypeOf outlookInspector.CurrentItem Is Outlook.MailItem Then
'NOW we KNOW we're looking at a mailitem.
Set outlookMail = outlookInspector.CurrentItem
'...work with outlookMail here...
End If
End If