背景:
question here提供了进一步的解释。
在这种情况下,我想知道为什么如果我将电子邮件设置为对象,我会在MailItem.Sent Property中收到“无效使用属性”的错误。
的
问题
通过向项目添加outlook参考:
带错误的代码无效使用属性(.Sent):
的
SetEmailAsObjectCode 的
Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
Dim EmailToSend As Object
Set EmailToSend = Nothing
Set EmailToSend = olApp.CreateItem(0)
With EmailToSend
On Error Resume Next
Call .Sent
If Err.Number = 0 Then ' 4. If Err.Number = 0
Cells(1,1).Value = "ErrorOutLookTimeout: Email not sent"
Else ' 4. If Err.Number = 0
Cells(1,1).Value = "Email Sent!"
End If ' 4. If Err.Number = 0
On Error GoTo 0
End With
工作代码:
的
SetCreateItemObjectCode 的
Dim olApp As Outlook.Application: Set olApp = CreateObject("Outlook.Application")
Dim EmailToSend As Outlook.MailItem
Set EmailToSend = Nothing
Set EmailToSend = olApp.CreateItem(0)
With olApp.CreateItem(0)
On Error Resume Next
Call .Sent
If Err.Number = 0 Then ' 4. If Err.Number = 0
Cells(1, 1).Value = "ErrorOutLookTimeout: Email not sent"
Else ' 4. If Err.Number = 0
Cells(1, 1).Value = "Email Sent!"
End If ' 4. If Err.Number = 0
On Error GoTo 0
End With
您可能会注意到,不是引用创建的电子邮件对象,而是立即设置
的
问题:
为什么代码 SetCreateItemObjectCode 有效, SetEmailAsObjectCode 不是?
答案 0 :(得分:4)
CreateItem
返回一个Object。 Outlook.MailItem
本身就是一个类,Set EmailToSend = olApp.CreateItem(0)
虽然EmailToSend
变量适应了返回的Object
,但它不再显示.Sent
属性。因此错误。
使用它:
With EmailToSend
On Error Resume Next
Call .ItemProperties.Item("Sent")
答案 1 :(得分:1)
如果您尝试发送消息,则需要调用MailItem.Send
方法。如果您要查看邮件是草稿还是已发送邮件,请阅读MailItem.Sent
媒体资源。
注意“d”vs“t”。