2015-10-25 84 views
0

所以我试图让脚本运行在每个发送的项目到特定的内部邮箱,我发现这个代码在线;Outlook中的VBA脚本不适用于内部电子邮件

Public Sub application_ItemSend(ByVal Item As Object, Cancel As Boolean) 

'check for address 
If InStr(LCase(Item.To), "[email protected]") Then 
     'ask if we've added the date 
     prompt$ = "You're sending this to " & Item.To & ". have you added the due date?" 
     If MsgBox(prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then 
     Cancel = True 
     End If 
    End If 

End Sub 

所以剧本的作品,但仅用于外部邮件(我一直在使用我的个人电子邮件进行测试),但不能为内部邮箱,当你把它发送到内部邮箱脚本不会运行。

这似乎更像是一个排放问题,而不是其他任何事情,但我想看看你们中的任何一个人是否可能会参与进来。我不确定这是否是一个比看起来更常见的问题,但我一直无法在网上找到任何东西,只有这么多的头抓我可以在一个晚上做!

希望你能帮上忙。 :)

谢谢,

汤姆。

回答

1

To属性是使用连接的所有收件人的只是显示名称“;”。它可能包含或不包含SMTP地址。

循环遍历收件人集合中的所有收件人,阅读Recipient.Type属性以确保它是olTo。检索Recipient.AddressEntry属性(返回AddressEntry对象)。如果AddressEntry.Type = "SMTP",则使用AddressEntry.Address。如果AddressEntry.Type = "EX",则使用AddressEntry.GetExchangeUser.PrimarySmtpAddress

另请注意,取消参数必须声明为ByRef

dim addrType 
dim addr 
dim recip  
for each recip in item.Recipients 
if recip.Type = olTo Then 
    addrType = recip.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3002001F") 
    if addrType = "EX" Then 
     addr = recip.AddressEntry.GetExchangeUser.PrimarySmtpAddress 
    Else 
     addr = recip.Address 
    End If 
    if LCase(addr) = "[email protected]" Then 
     MsgBox "got it" 
     Exit for 
    End If 
    End If 
next 
+0

嗨德米特里,任何机会,你可以告诉我一个如何读取类型的例子等? VBA的前景对我来说是新的,而VBA总的来说是我很少使用的,所以我很不确定你的意思。 –

+0

查看已更新的答案 –

+0

非常感谢这一点,我查看了属性访问器的内容,但是我无法正常工作!现在我知道供将来参考。 :) –

0

你对这个“Instr”使用了不正确的函数,它将返回一个字符串在另一个字符串中的位置。如果你想比较两个字符串,正确的功能是“StrComp”

Option Explicit 

Public Sub application_ItemSend(ByVal Item As Object, Cancel As Boolean) 

    Const strRELEVANT_EMAIL_ADDRESS As String = "[email protected]" 
    Dim strPromp As String 

    strPromp = "You're sending this to " & Item.To & ". have you added the due date?" 

    'check for address 
    If StrComp(LCase$(Item.To), strRELEVANT_EMAIL_ADDRESS) = 0 Then 

     'ask if we've added the date 
     If MsgBox(strPromp, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then 
      Cancel = True 
     End If 
    End If 

End Sub 

希望这可以解决问题。

感谢

相关问题