excel vba从前台获取所有日历

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

为此,我已经用下面的语句成功加载了默认日历:

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

但只要我尝试加载其他可用的日历,我遇到了一些问题。 我似乎通过在vba编辑器的本地variables视图中手动浏览Outlook会话对象来查找可用的日历。 到达那里的path(通过所有会话,文件夹和项目层次结构)对于每个用户来说都是不同的。 所以我现在最好的解决scheme是抓取整个对象,直到find有效的日历。 但老实说,我希望有一个更好的解决scheme。

我的目标是确定当前Outlook会话中的所有可用日历,并为用户select在哪个日历中添加新约会。

只是为了logging,我添加以下代码的约会:

 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中的任何位置在文件夹树中创build一个日历文件夹。 使用DefaultItemType属性在Outlook中查找日历文件夹,它将从OlItemType枚举中返回一个常量,指示文件夹中包含的默认Outlook项目types。 在日历的情况下,你应该得到olAppointmentItem值。

也可以使用Namespace类的GetDefaultFolder方法来获取一个Folder对象,该对象代表当前configuration文件的请求types的默认文件夹; 例如,获取当前login的用户的默认日历文件夹。

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

然后遍历所有子文件夹。

Store类还提供了GetDefaultFolder方法,它将返回一个Folder对象,该对象表示存储中的默认文件夹,并且是FolderType参数指定的types。 此方法与NameSpace对象的GetDefaultFolder方法类似。 不同之处在于此方法获取与帐户相关联的交付存储上的默认文件夹,而NameSpace.GetDefaultFolder返回当前configuration文件的默认存储中的默认文件夹。