【问题标题】:VBA Excel synchronising the date cells with Outlook calendar eventsVBA Excel 将日期单元格与 Outlook 日历事件同步
【发布时间】: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


【解决方案1】:

首先,你需要正确声明对象:

Dim items As Outlook.Items

第二,不需要两次访问相同的对象:

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)

您可以改用以下代码:

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

最后,您可能会发现 Getting started with VBA in Office 文章很有帮助。

【讨论】:

  • 嗨,我收到类型不匹配错误,突出显示代码:Set objapt = items.add(olAppointmentItem)
  • 太棒了!现在可以了。我有一个查询,如何更改日期并将其与单元格中的日期同步?
  • 知道了!不要打扰。谢谢你的时间:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多