MailItem已发送无效使用

时间:2016-07-18 17:03:02

标签: excel excel-vba outlook outlook-vba vba


背景

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 不是?

2 个答案:

答案 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”。