我在尝试选择 SharedMailbox 中的子文件夹时遇到问题。
我已阅读
GetSharedDefaultFolder
上的大量资源。 Sub ListOutlookEmailInfoInExcel()
Dim olNS As Outlook.NameSpace
Dim olTaskfolder As Outlook.MAPIFolder
Dim olTask As Outlook.TaskItem
Dim olItems As Outlook.Items
Set o1NS = GetNamespace("MAPI")
Set o1TaskFolder = o1NS.GetSharedDefaultFolder("Shared Folder 1", _
olFolderInbox).Folders("admin")
Set o1Items = o1TaskFolder.Items
End Sub
您首先按照此处所述解析所有者http://www.slipstick.com/developer/working-vba-nondefault-outlook-folders/
“解析收件人时,您可以使用邮箱所有者的显示名称、别名或电子邮件地址。”
我发现电子邮件地址总是可以解析,因此验证它是否解析没有任何好处。
Sub ListOutlookEmailInfoInExcel()
Dim olNS As Outlook.NameSpace
Dim olTaskfolder As Outlook.MAPIFolder
Dim olTask As Outlook.TaskItem
Dim olItems As Outlook.Items
Dim objOwner As Outlook.Recipient
Set olNS = GetNamespace("MAPI")
Set objOwner = olNS.CreateRecipient("Shared Folder 1")
objOwner.Resolve
If objOwner.Resolved Then
Set olTaskFolder = olNS.GetSharedDefaultFolder(objOwner, _
olFolderInbox).Folders("admin")
Set olItems = olTaskFolder.Items
End If
End Sub
Namespace 类的 GetSharedDefaultFolder 方法接受两个参数:Recipient 对象和FolderType 值。
如何:显示收件人的共享日历文章提供了以下 C# 示例代码:
private void DisplayManagerCalendar()
{
Outlook.AddressEntry addrEntry =
Application.Session.CurrentUser.AddressEntry;
if (addrEntry.Type == "EX")
{
Outlook.ExchangeUser manager =
Application.Session.CurrentUser.
AddressEntry.GetExchangeUser().GetExchangeUserManager();
if (manager != null)
{
Outlook.Recipient recip =
Application.Session.CreateRecipient(manager.Name);
if (recip.Resolve())
{
try
{
Outlook.Folder folder =
Application.Session.GetSharedDefaultFolder(
recip, Outlook.OlDefaultFolders.olFolderCalendar)
as Outlook.Folder;
folder.Display();
}
catch
{
MessageBox.Show("Could not open manager's calendar.",
"GetSharedDefaultFolder Example",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
}
}
为了回答 ArsedianIvan 的问题,我发现使用像“ListOutlookEmailInfoInExcel”这样的子名称,他可能有兴趣将共享邮箱中的一些电子邮件信息保存在 Excel 文件中。
这是我的建议:
将“共享文件夹 1”替换为您的共享电子邮件名称,然后 我让这个脚本在 80 封电子邮件后停止,但您可以根据需要修改或删除
Sub ListEmailInfoInExcel()
Dim olNS As Outlook.Namespace
Dim olTaskfolder As Outlook.MAPIFolder
Dim olTask As Outlook.TaskItem
Dim olItems As Outlook.Items
Dim olMailItem As Outlook.MailItem
Dim objOwner As Outlook.Recipient
Dim i As Integer
Dim x As Integer
Dim Path As String
Dim RepTemp, NewRep As String
Set olNS = GetNamespace("MAPI")
Set objOwner = olNS.CreateRecipient("Shared Folder 1")
objOwner.Resolve
If objOwner.Resolved Then
Set olTaskfolder = olNS.GetSharedDefaultFolder(objOwner, _
olFolderInbox).Folders("Admin")
Set olItems = olTaskfolder.Items
End If
'Print to a new excel file
Dim objExcel As Object
Dim sheet As Object
Set objExcel = CreateObject("Excel.Application")
Workbooks.Add
'Create a Temp rep in the C drive if it doesn't exist
RepTemp = "C:\Temp\"
NewRep = Dir(RepTemp, vbDirectory)
If NewRep = "" Then
MkDir RepTemp
End If
For Each olMailItem In olTaskfolder.Items
i = i + 1
Range("G" & i).Value = i
Range("H" & i).Value = olMailItem.Sender
Range("I" & i).Value = olMailItem.Subject
Range("J" & i).Value = olMailItem.ReceivedTime
' it will print only 80 email details...
If i = 80 Then
GoTo isenough
End If
Next
isenough:
Path = "C:\Temp\MyNewWorkbook"
ActiveWorkbook.SaveAs Filename:=Path
ActiveWorkbook.Close
End Sub
你的,