excel vba从outlook

时间:2015-07-14 10:15:17

标签: excel vba excel-vba calendar outlook

我尝试通过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

如何处理?

1 个答案:

答案 0 :(得分:0)

您可以在Outlook中的文件夹树中的任何位置创建日历文件夹。使用DefaultItemType属性在Outlook中查找日历文件夹,它从OlItemType枚举中返回一个常量,指示文件夹中包含的默认Outlook项类型。如果是日历,您应该获取olAppointmentItem值。

您也可以使用Namespace类的GetDefaultFolder方法获取一个Folder对象,该对象表示当前配置文件所请求类型的默认文件夹;例如,获取当前登录用户的默认日历文件夹。

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参数指定的类型。此方法类似于NameSpace对象的 GetDefaultFolder 方法。区别在于此方法获取与该帐户关联的传递存储上的默认文件夹,而NameSpace.GetDefaultFolder返回当前配置文件的默认存储上的默认文件夹。