Excel VBA:在不使用GetNamespace(“MAPI”)的情况下将Outlook电子邮件移动到公用文件夹中

时间:2014-12-06 04:10:28

标签: excel-vba outlook vba excel

我尝试执行以下操作: 我有一个电子邮件列表,位于我的收件箱的子文件夹中(名为" A_Classer") 我需要运行代码来接收这些电子邮件并将它们放在另一个文件夹中。该目标文件夹将根据邮件的主题而有所不同。 我需要在Excel中执行此操作,因为目标文件将根据我的Excel工作簿中的信息而有所不同。

所以我的问题是我使用的是Windows 32位系统。因此,从我所读过的内容来看,它似乎并不支持GetNamespace(" Mapi")方法。因为当我运行它时,我得到一个"错误438"在GetNamespace(" Mapi")行

如果目标文件驻留在我的收件箱中,我可以这样做,但我需要将电子邮件移动到公共文件夹。

所以到目前为止,我在使用我的代码。如果有人可以帮助我传递那个非常有用的错误438。

Sub move_to_public_folder()

Dim msg As Outlook.MailItem
Dim olFolder As Outlook.Folder         'public folder where I want the email to be moved
Dim sourceFolder As Outlook.Folder           'current folder of the emails that are to be moved
Dim OlApp As Object

Dim myNamespace As Outlook.Namespace
Dim myRecipient As Outlook.Recipient

Set OlApp = CreateObject("Outlook.Application")                         'ouverture du outlook
Set myNamespace = Application.GetNamespace("MAPI")              'WHERE I GET THE 438 ERROR
Set myRecipient = myNamespace.CreateRecipient("guillaume.hebert")
Set olFolder = Session.GetSharedDefaultFolder(myRecipient, olPublicFoldersAllPublicFolders)
Set olFolder = olFolder.Folders("\Q12")

Set sourceFolder = Session.GetDefaultFolder(sourceFolderInbox)
Set sourceFolder = sourceFolder.Folders("A_Classer")
If sourceFolder Is Nothing Then Exit Sub

I = sourceFolder.Items.Count
nbre_op = I                                                         'détermine combien de courriel dans le répertoire
I = 1
While I <= nbre_op
    Set msg = olFolder.Items(1)
    msg.Move olFolder
    I = I + 1
Wend

Set OlApp = Nothing    

End Sub

非常感谢你!

2 个答案:

答案 0 :(得分:0)

尝试

...
Set myNamespace = OlApp.GetNamespace("MAPI")
...

由于OlApp的类型为Application Object (Outlook),而Application的类型为Application Object (Excel),当您从Excel宏中引用它时,因此它没有任何可用的GetNamespace方法

答案 1 :(得分:0)

使用x86或x64操作系统并不重要。该方法存在于所有情况中。

How to automate Outlook from another program文章介绍了如何自动化Outlook。

我建议在另一个帖子上提出不同的问题。因此,论坛读者可以轻松地识别问题和答案。