【发布时间】:2020-09-06 22:26:28
【问题描述】:
下午好,
我一直在努力将 Outlook 日历与 MS Excel 同步。我希望我的带有日期的单元格作为事件出现在此日历中。
我为此目的找到的最佳代码来自这里:
Excel Create an Outlook calendar event
但是,由于代码不完整,问题已结束。
在我的示例中尝试此代码
Sub Calendaroutlookevent()
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.Namespace
Dim items As Outlook.Folder, objCalendar As Outlook.Folder, objapt As Outlook.Folder
Dim wb As Workbook
Dim ws As Worksheet
Dim Dt As Date
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
Set Dt = ws.Range("B2:C6") ' Dates with surveyors included. Maybe some Match option here?
Const olFolderCalendar = 9
Const olAppointmentItem = 1 '1 = Appointment
Set objOutlook = CreateObject("Outlook.Application")
'Set objOutlook = GetObject(, "Outlook.Application") ' outlook already open
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set items = objNamespace.GetDefaultFolder(olFolderCalendar).items
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar).Folders("subfolder")
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar) ' main calender
Set objapt = objCalendar.items.add(olAppointmentItem)
objapt.Subject = "Test" 'Owner
objapt.Start = Dt + TimeValue("08:00:00")
objapt.Duration = 60 * 8 'Duration(in minutes) OR End(I'm not sure so try both)
objapt.End = Dt + TimeValue("16:00:00")
objapt.Save
End Sub
现在调试器显示 "Object required" 指向以下行:Set Dt = ws.Range("C2:C6")
如果我将原始声明保留为Date,则如下所示
Sub Calendaroutlookevent()
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.Namespace
Dim items As Outlook.Folder, objCalendar As Outlook.Folder, objapt As Outlook.Folder
Const olFolderCalendar = 9
Const olAppointmentItem = 1 '1 = Appointment
Set objOutlook = CreateObject("Outlook.Application")
'Set objOutlook = GetObject(, "Outlook.Application") ' outlook already open
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set items = objNamespace.GetDefaultFolder(olFolderCalendar).items
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar).Folders("subfolder")
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar) ' main calender
Set objapt = objCalendar.items.add(olAppointmentItem)
objapt.Subject = "Test" 'Owner
objapt.Start = Date + TimeValue("08:00:00")
objapt.Duration = 60 * 8 'Duration(in minutes) OR End(I'm not sure so try both)
objapt.End = Date + TimeValue("16:00:00")
objapt.Save
End Sub
然后调试器对以下行说 "Type-mismatch":
Set items = objNamespace.GetDefaultFolder(olFolderCalendar).items
另一个选项来自这里:
Determining selected Outlook Calendar date with VBA
但即使我使用这个纯代码,我也会收到错误:“对象不支持此属性或方法”指向该行:
Set oExpl = Application.ActiveExplorer
如何解决此问题并让我的日期显示在 Outlook 日历上?我可以扩大我的范围,包括测量员的名字吗?
感谢和问候
更新:
我的代码的最新版本如下:
Sub Calendaroutlookevent()
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.Namespace
Dim items As Outlook.items
Dim objCalendar As Outlook.Folder, objapt As Outlook.Folder
Const olFolderCalendar = 9
Const olAppointmentItem = 1 '1 = Appointment
Set objOutlook = CreateObject("Outlook.Application")
'Set objOutlook = GetObject(, "Outlook.Application") ' outlook already open
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set items = objNamespace.GetDefaultFolder(olFolderCalendar).items
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar) ' main
calender
Set items = objCalendar.items
Set objapt = items.add(olAppointmentItem)
objapt.Subject = "Test" 'Owner
objapt.Start = Date + TimeValue("08:00:00")
objapt.Duration = 60 * 8 'Duration(in minutes) OR End(I'm not sure so try
both)
objapt.End = Date + TimeValue("16:00:00")
objapt.Save
End Sub
我得到 Type Mismatch,因为调试器会突出显示该行:
Set objapt = items.add(olAppointmentItem)
【问题讨论】:
-
Set dt没有意义,因为Date不是Object变量并且不需要Set... 但该行的右侧是Range无论如何。 -
那么我应该用我的范围替换日期吗?
-
我不确定您到底想做什么,但您似乎需要在该范围内循环。
-
我希望尽可能将所有这些日期与他们的计划者一起填充到 Outlook 日历中。当它不可行时,我会很高兴有一次约会。
标签: excel vba outlook calendar