我尝试通过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
如何处理?
答案 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返回当前配置文件的默认存储上的默认文件夹。