Vba 如何更新会议?错误:参数不是可选的

Vba 如何更新会议?错误:参数不是可选的,vba,outlook,Vba,Outlook,在最近的Outlook更新之后,此代码开始返回 “编译错误:参数不是可选的” 行Set Travel=Items.Add正在触发错误 Public Sub AddTravelTime() Dim coll As VBA.Collection Dim obj As Object Dim Appt As Outlook.AppointmentItem Dim Travel As Outlook.AppointmentItem Dim Items As Outlook.Items

在最近的Outlook更新之后,此代码开始返回

“编译错误:参数不是可选的”

Set Travel=Items.Add
正在触发错误

Public Sub AddTravelTime()
  Dim coll As VBA.Collection
  Dim obj As Object
  Dim Appt As Outlook.AppointmentItem
  Dim Travel As Outlook.AppointmentItem
  Dim Items As Outlook.Items
  Dim Before&, After&
  Dim Category$, Subject$  

'1. Block minutes before and after the appointment
  Before = 30
  After = 30  

'3. Assign this category
  Category = "Meeting Cushion Time"  
  Set coll = GetCurrentItems
  If coll.Count = 0 Then Exit Sub
  For Each obj In coll
    If TypeOf obj Is Outlook.AppointmentItem Then
      Set Appt = obj
      If TypeOf Appt.Parent Is Outlook.AppointmentItem Then
        Set Items = Appt.Parent.Parent.Items
      Else
        Set Items = Appt.Parent.Items
      End If      

'4. Use the main appointment's subject
      Subject = "Meeting Cushion Time"      
      If Before > 0 Then
        Set Travel = Items.Add ' <------ Compile Error
        Travel.Subject = Subject
        Travel.Start = DateAdd("n", -Before, Appt.Start)
        Travel.Duration = Before
        Travel.Categories = Category
        Travel.Save
      End If      
    If After > 0 Then
        Set Travel = Items.Add
        Travel.Subject = Subject
        Travel.Start = Appt.End
        Travel.Duration = After
        Travel.Categories = Category
        Travel.Save
      End If
    End If
  Next
End Sub

目标是在每次会议前后添加一个时间缓冲区。

travel
对象定义为
AppointItem
类的实例:

Dim Travel As Outlook.AppointmentItem
但在代码中,您试图设置另一个项目类型:

Set Travel = Items.Add

将返回文件夹的默认项目类型。当然,这取决于文件夹。但我怀疑它在您的情况下不是约会项目。

旅行对象被定义为
约会项目
类的实例:

Dim Travel As Outlook.AppointmentItem
但在代码中,您试图设置另一个项目类型:

Set Travel = Items.Add
将返回文件夹的默认项目类型。当然,这取决于文件夹。但我怀疑它在您的情况下不是约会项目。

如果“Items.Add”要求更多参数,则意味着该集合中的项目具有更多非可选参数,因此该文件夹的默认项目不是约会项目

选项显式
公共子地址TravelTime()
作为VBA.Collection的Dim coll
作为对象的Dim obj
Dim应用程序作为任命项
Dim旅行作为任命项目
将项目设置为项目
迟早
迟迟不见
模糊主题为字符串
'约会前后的阻止分钟数
之前=30
之后=30
Set coll=GetCurrentItems
如果coll.Count=0,则退出Sub
对于coll中的每个obj
如果obj的类型为outlook.AppointmentItem,则
设置Appt=obj
Debug.Print“Appt.Subject:&Appt.Subject
'https://docs.microsoft.com/en-us/office/vba/api/outlook.folder.defaultitemtype
'https://docs.microsoft.com/en-us/office/vba/api/outlook.olitemtype
如果Appt.Parent的类型为outlook.AppointmentItem,则
“定期约会
调试。打印“Appt.Parent.Parent:”&Appt.Parent.Parent
Debug.Print Appt.Parent.Parent.DefaultItemType“1=olAppointmentItem
如果Appt.Parent.Parent.DefaultItemType=olAppointmentItem,则
设置项目=Appt.Parent.Parent.Items
其他的
Debug.Print Appt.Parent.Parent.DefaultItemType
MsgBox“&Appt.Parent.Parent&”中的默认项不是约会项
出口接头
如果结束
其他的
调试。打印“Appt.Parent:&Appt.Parent”
Debug.Print Appt.Parent.DefaultItemType“1=olAppointmentItem
如果Appt.Parent.DefaultItemType=olAppointmentItem,则
设置项=Appt.Parent.Items
其他的
Debug.Print Appt.Parent.DefaultItemType
MsgBox“&Appt.Parent&”中的默认项不是约会项
出口接头
如果结束
如果结束
主题=“会议缓冲时间”
如果之前>0,则
设置旅行=项目。添加
旅行主题
Travel.Start=DateAdd(“n”,-Before,Appt.Start)
旅行。持续时间=之前
旅行,储蓄
如果结束
如果大于0,则
设置旅行=项目。添加
旅行主题
行程开始=应用结束
旅行。持续时间=之后
旅行,储蓄
如果结束
如果结束
下一个
端接头
私有函数GetCurrentItems(可选的IsInspector为布尔值)作为VBA.Collection
作为VBA.Collection的Dim coll
以暗温为对象
选择暗选
作为对象的Dim obj
我想我会坚持多久
Set coll=新VBA.Collection
设置Win=ActiveWindow
如果Win的类型是outlook。那么
IsInspector=True
coll.Add Win.CurrentItem
其他的
IsInspector=False
设置Sel=Win.Selection
如果不是Sel,那就什么都不是了
对于i=1至选择计数
集合添加选择(i)
下一个
如果结束
如果结束
设置GetCurrentItems=coll
端函数
如果“Items.Add”要求更多参数,则意味着该集合中的项具有更多非可选参数,因此该文件夹的默认项不是约会项

选项显式
公共子地址TravelTime()
作为VBA.Collection的Dim coll
作为对象的Dim obj
Dim应用程序作为任命项
Dim旅行作为任命项目
将项目设置为项目
迟早
迟迟不见
模糊主题为字符串
'约会前后的阻止分钟数
之前=30
之后=30
Set coll=GetCurrentItems
如果coll.Count=0,则退出Sub
对于coll中的每个obj
如果obj的类型为outlook.AppointmentItem,则
设置Appt=obj
Debug.Print“Appt.Subject:&Appt.Subject
'https://docs.microsoft.com/en-us/office/vba/api/outlook.folder.defaultitemtype
'https://docs.microsoft.com/en-us/office/vba/api/outlook.olitemtype
如果Appt.Parent的类型为outlook.AppointmentItem,则
“定期约会
调试。打印“Appt.Parent.Parent:”&Appt.Parent.Parent
Debug.Print Appt.Parent.Parent.DefaultItemType“1=olAppointmentItem
如果Appt.Parent.Parent.DefaultItemType=olAppointmentItem,则
设置项目=