我使用Outlook 2003中的宏将选定的电子邮件移动到特定文件夹。移动工作,但不幸的是收到的日期被覆盖到当前时间。 关于如何防止这种情况的任何想法。
我使用此代码:
Sub verschiebenInOrdner()
On Error Resume Next
Dim objFolder As Outlook.MAPIFolder, objInbox As Outlook.MAPIFolder
Dim objNS As Outlook.NameSpace, objItem As Outlook.MailItem
Set objNS = Application.GetNamespace("MAPI")
Set objInbox = objNS.GetDefaultFolder(olFolderInbox)
Set objFolder = objNS.Folders.Item("2009").Folders.Item("In")
If objFolder Is Nothing Then
MsgBox "This folder doesn't exist!", vbOKOnly + vbExclamation, "INVALID FOLDER"
End If
If Application.ActiveExplorer.Selection.Count = 0 Then
Exit Sub
End If
For Each objItem In Application.ActiveExplorer.Selection
If objFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
objItem.UnRead = False
objItem.Move objFolder
End If
End If
Next
Set objItem = Nothing
Set objFolder = Nothing
Set objInbox = Nothing
Set objNS = Nothing
End Sub
感谢76mel的帮助,我提出了这个问题:
Sub verschiebenInArchiv()
Dim Session As Redemption.rDOSession
Dim objFolder As Redemption.RDOFolder
Dim objItem As Outlook.MailItem
Dim objItem2 As Redemption.RDOMail
Set Session = CreateObject("Redemption.RDOSession")
Session.Logon
Set objFolder = Session.Stores.Item("2009").IPMRootFolder.Folders("In")
If Application.ActiveExplorer.Selection.Count = 0 Then
Exit Sub
End If
For Each objItem In Application.ActiveExplorer.Selection
Set objItem2 = Session.GetMessageFromID(objItem.EntryID, Session.Stores.DefaultStore.EntryID)
objItem2.Move objFolder
Next
End Sub
当我在收件箱中时,此功能正常。有没有人知道如何将GetMessageFromID中的Store-ID设置为我选择的商店的ID?
编辑:感谢76mel,我现在使用objItem.Parent.StoreID来获取当前的StoreID。
答案 0 :(得分:1)
你的权利网上有一些报道称它不起作用。
似乎VB6没有冒出错误:(。我认为解决这个问题的方法是使用CDO或事实上的第三方lib“Redemption”。在后台进行实际移动。
中号
更新: 尝试这样的东西..我没有机器上的VB所以没有测试它 但你会明白这个想法。
Sub verschiebenInOrdner()
On Error Resume Next
Dim objNS As Outlook.NameSpace
Dim objRDOSession As Redemption.RDOSession
Dim objRDOFolder As Redemption.RDOFolder
Dim objItem As Outlook.MailItem
Dim objRDOMail As Redemption.RDOMail
Set objNS = Application.GetNamespace("MAPI")
Set objRDOSession = CreateObject("Redemption.RDOSession")
objRDOSession.MAPIOBJECT = objNS.MAPIOBJECT 'or Logon
Set objRDOFolder = Session.GetFolderFromPath("<YOUR PATH>")
' do your validation for folder and selection
For Each objItem In Application.ActiveExplorer.Selection
If objFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
Set objRDOMail = objRDOSession.GetMessageFromID(objItem.EntryID)
objRDOMail.UnRead = False
objRDOMail.Move objRDOFolder
End If
End If
Next
Set objItem = Nothing
Set objRDOMail = Nothing
Set objRDOFolder = Nothing
Set objRDOSession = Nothing
Set objNS = Nothing
End Sub
答案 1 :(得分:0)
它也不会在Outlook 2003中更改我的日期。如果这是一个持续存在的问题,我会尝试获取该项目的日期并在转移后覆盖它。
答案 2 :(得分:0)
我找到了解决方案:在子文件夹中移动电子邮件,只需为“创建日期”字段添加一列而不是“收到日期”,并使用此字段排序...完成工作!
礁