Outlook 使用 GetSharedDefaultFolder 选择 SharedMailbox 中的子文件夹

问题描述 投票:0回答:3

我在尝试选择 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
vba outlook
3个回答
2
投票

您首先按照此处所述解析所有者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

0
投票

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);
                }
            }
        }
    }
}

0
投票

为了回答 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

你的,

© www.soinside.com 2019 - 2024. All rights reserved.