使用 Excel VBA 从 Outlook 获取所有日历

Get all calendars from Outlook using Excel VBA

我想通过 VBA 使用 Excel 文件从当前 Outlook 会话中读取所有可用的非共享日历。

我加载了默认日历:

Set Calendar = outApp.GetNamespace("Mapi").GetDefaultFolder(9)

我似乎是通过在 VBA 编辑器的局部变量视图中手动浏览 Outlook 会话对象来找到可用日历的。到达那里的路径(通过所有会话、文件夹和项目层次结构)对于每个用户来说显然是不同的。所以我目前最好的解决方案是抓取整个对象,直到找到一个有效的日历。有更好的解决方案吗?

我的目标是识别当前 Outlook 会话中的所有可用日历,并让用户选择在哪个日历中添加新约会。

我使用以下代码添加约会:

Public Sub AddOutlooktermin(subject As String, _
                        startDateTime As Date, _
                        endDateTime As Date, _
                        body As String, _
                        location As String, _
                        allDayEvent As Boolean, _
                        reminderMinutes As Integer, _
                        setReminder As Boolean, _
                        busyStatus As Integer _
                        )
Dim outApp As Object, apptoutapp As Object

Set outApp = CreateObject("Outlook.Application")
Set apptoutapp = outApp.CreateItem(1) 'olAppointmentItem)
With apptoutapp
    .Start = startDateTime
    .End = endDateTime
    .subject = subject
    .body = body
    .location = location
    .allDayEvent = allDayEvent
    .reminderMinutesBeforeStart = reminderMinutes
    .ReminderSet = setReminder
    .busyStatus = busyStatus
    .Categories = "#Urlaub"
    .importance = 2
    .Save
End With
Set apptoutapp = Nothing
Set outApp = Nothing
End Sub

您可以在 Outlook 文件夹树中的任意位置创建日历文件夹。使用 DefaultItemType property to find calendar folders in Outlook, it returns a constant from the OlItemType 枚举指示文件夹中包含的默认 Outlook 项目类型。如果是日历,您应该获得 olAppointmentItem 值。

您还可以使用命名空间 class 的 GetDefaultFolder 方法来获取 Folder 对象,该对象表示当前配置文件所请求类型的默认文件夹;例如,获取当前登录用户的默认日历文件夹。

Sub ChangeCurrentFolder()  
 Dim myNamespace As Outlook.NameSpace 
 Set myNamespace = Application.GetNamespace("MAPI")  
 Set Application.ActiveExplorer.CurrentFolder = _  
 myNamespace.GetDefaultFolder(olFolderCalendar)  
End Sub

然后遍历所有子文件夹。

Store class 也提供了 GetDefaultFolder 方法,它 returns 一个 Folder 对象,表示商店中的默认文件夹,并且是 FolderType 指定的类型争论。此方法类似于 NameSpace 对象的 GetDefaultFolder 方法。不同之处在于此方法获取与帐户关联的交付商店上的默认文件夹,而 NameSpace.GetDefaultFolder returns 当前配置文件的默认商店上的默认文件夹。