发送邀请时使用.To的Application_ItemSend中的错误:对象不支持此属性或方法

时间:2019-03-12 14:38:34

标签: vba outlook outlook-vba

我正试图阻止将电子邮件发送到特定组。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

    Dim prompt As String
    Dim GROUP1 As String
    Dim GROUP2 As String

    GROUP1 = "GROUP of People"
    GROUP2 = "personx@yahoo.com"

    If InStr(Item.To, GROUP1) > 0 Or InStr(Item.To, GROUP2) Then
        prompt = "This Email is sent to the wrong person/Groups in .To"
        MsgBox (prompt)
        Cancel = True
    End If

    If InStr(Item.CC, GROUP1) > 0 Or InStr(Item.CC, GROUP2) Then
        prompt = "This Email is sent to the wrong person/Groups in .Cc"
        MsgBox (prompt)
        Cancel = True
    End If

End Sub

当我想通过Outlook日历发送邀请时,这给我带来了错误。

  

错误号:438“对象不支持此属性或方法”

在线错误:If InStr(Item.To, GROUP1) > 0 Or InStr(Item.To, GROUP2) Then

我该如何解决?

2 个答案:

答案 0 :(得分:1)

该错误本身表示发送邀请时,属性.ToItem无效。

这是因为在发送邀请时,用于Object的{​​{1}}是Item(与发送电子邮件时使用的olAppointmentItem不同)。

如果您仍要检查邀请的收件人,则应使用属性olMailItem而不是.Recipients。 无论如何,您都可以通过在运行时检查.To的类型来保护代码:

Item

如果根据If TypeName(Item) = "your desired type" Then 'your code to check the recipients here End If 的类型使用不同的代码,则可以使用开关:

Item

为了检索确切的类型,建议您在代码中设置一个断点,然后使用立即窗口在不同的用例上打印Select Case TypeName(Item) Case "Outlook.MailItem": 'check .To Case "Outlook.AppointmentItem": 'check .Recipients 'etc. End Select 。请注意,使用Debug.Print TypeName(Item)解决方案,您还可以使用Select语句(如果遇到先前的Case Else中的任何一个,您将跌落到那里),您将在此引发“未处理的异常”或在不知道如何处理指定对象类型时想要做的其他事情。

答案 1 :(得分:0)

除了@Matteo NNZ的回答外,还必须将Cancel参数声明为ByRef

Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean)