我正试图阻止将电子邮件发送到特定组。
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
我该如何解决?
答案 0 :(得分:1)
该错误本身表示发送邀请时,属性.To
对Item
无效。
这是因为在发送邀请时,用于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)