我有以下宏;
Private WithEvents MySents As Outlook.Items
Private Sub Application_Startup()
Set MySents = Session.GetDefaultFolder(olFolderSentMail).Items
End Sub
Private Sub MySents_ItemAdd(ByVal Item As Object)
Dim objNS As Outlook.NameSpace
Dim targetFolder As Outlook.MAPIFolder
Set objNS = Outlook.GetNamespace("MAPI")
If TypeOf Item Is Outlook.MailItem Then
If Item.SenderName = "Sender 1" Then
Set targetFolder = objNS.Folders("Folder 1").Folders("Sent Items")
Set newItem = Item.Copy
newItem.Move targetFolder
End If
If Item.SenderName = "Sender 2" Then
Set targetFolder = objNS.Folders("Folder 2").Folders("Sent Items")
Set newItem = Item.Copy
newItem.Move targetFolder
End If
End If
End Sub
上周这个工作很好。现在,当宏运行时,我得到一个"运行时错误-2147221241(80040107)操作失败"
查看出错的调试器;
If Item.SenderName =
如果我看一下项目在观察窗口大多数属性有"操作失败"的值。
最奇怪的是消息仍然会被复制。
有谁能看出我在做什么蠢事吗?
sendname属性返回一个字符串,该字符串指示Outlook项目的发件人的显示名称。在邮件发送后设置。新条目(未发送)没有设置此属性。
你可以考虑使用SaveSentMessageFolder属性,该属性允许设置一个Folder对象,该对象表示发送后电子邮件副本将保存在其中的文件夹。例如,您可以在处理ItemSend事件时设置此属性。
Sub SetSentFolder()
Dim myItem As Outlook.MailITem
Dim myResponse As Outlook.MailITem
Dim mpfInbox As Outlook.Folder
Dim mpf As Outlook.Folder
Set mpfInbox = Application.Session.GetDefaultFolder(olFolderInbox)
Set mpf = mpfInbox.Folders.Add("SaveMyPersonalItems")
Set myItem = Application.ActiveInspector.CurrentItem
Set myResponse = myItem.Reply
myResponse.Display
myResponse.To = "Eugene Astafiev"
Set myResponse.SaveSentMessageFolder = mpf
myResponse.Send
End Sub