从Excel VBA访问共享Outlook收件箱

时间:2019-07-09 02:15:55

标签: excel vba outlook outlook-vba

我正在尝试从Excel VBA访问共享的收件箱电子邮件,但是我的代码无法正常工作,只能在个人收件箱上工作。

我已经在个人收件箱中尝试了以下代码,并且效果很好。不太确定如何处理共享收件箱,可能是设置共享收件箱的方式。

Dim OutlookApp As Object, MailFolder As Object, SharedMailbox as Object, OutlookItem as Object

Set OutlookApp = CreateObject("Outlook.Application")

'This line works for personal inbox
'Set MailFolder = OutlookApp.Session.Folders("email@outlook.com").Folders("Inbox")

'Trying to modify below to access shared inbox
Set SharedMailbox = OutlookApp.Session.CreateRecipient("shared@email.com")
'This line below causes error, specifically olFolderInbox
Set MailFolder = OutlookApp.Session.GetSharedDefaultFolder(SharedMailbox, olFolderInbox) 

For Each OutlookItem In MailFolder.Items
'other code runs here
Next

也许是由于我使用了后期绑定方法并将某些东西与早期绑定相混合?但是我想让它在后期绑定以保持兼容性。

我玩了下面的代码,但是遇到了类似的问题。

Dim OutlookNS as Object

Set OutlookNS = OutlookApp.GetNamespace("MAPI")
OutlookNS.logon
Set SharedMailbox = OutlookNS.CreateRecipient("shared@email.com")
SharedMailbox.resolve
If SharedMailbox.resolved Then
    Set MailFolder = OutlookNS.GetSharedDefaultFolder(SharedMailbox, olFolderInbox)
End If

任何帮助将不胜感激。我已经坐了一段时间了,只是做对了。谢谢!

1 个答案:

答案 0 :(得分:0)

Namespace类的GetSharedDefaultFolder方法返回一个Folder对象,该对象代表指定用户的指定默认文件夹。

我不太了解您希望从代码中得到什么,但是我建议添加Display方法来显示共享文件夹:

Dim OutlookNS as Outlook.Namespace
Set OutlookNS = OutlookApp.GetNamespace("MAPI")
OutlookNS.Logon
Set SharedMailbox = OutlookNS.CreateRecipient("shared@email.com")
SharedMailbox.resolve
If SharedMailbox.resolved Then
    Set MailFolder = OutlookNS.GetSharedDefaultFolder(SharedMailbox, olFolderInbox)
    MailFolder.Display
End If

此外,我建议设置一个断点并在调试器下运行代码,以查看幕后情况。