在Microsoft Outlook中设置会议的默认位置(通过VBA代码)

时间:2014-11-21 09:35:36

标签: vba outlook outlook-vba

我正在尝试在Microsoft Outlook中实现一个VBA项目,如果没有指定会议,它会设置会议的默认位置。

作为用户,当我尝试创建会议/日历条目但未指定位置时,Outlook会提示我以下消息:

Outlook has detected the following:
- The location is not specified.
Do you want to send the meeting anyway?
Yes/No

在很多情况下会议的位置被理解,或写在主题中,或者我只是为自己安排一些工作,所以一直得到提示非常烦人。

我在这里找到了一些代码:     http://blogs.technet.com/b/ewan/archive/2013/11/08/tip-o-the-week-196-change-outlook-meeting-duration.aspx

更改默认的Outlook约会持续时间设置。我修改它以满足我的要求。

我的意图是:

  1. 正在创建的新约会将包含文字"(默认)" 在“位置”字段中预先指定。
  2. 现有的约会是 修改后不会改变。
  3. 现在,下面的代码适用于正在创建的新约会,但是如果我打开现有约会并且“位置”字段的值为空,则将其设置为"(默认值)"关闭约会时提示我保存/取消(因为它认为我修改了项目)。这不是我打算如何工作的。

    目前的代码:

    Private objMeeting As clsMeeting
    
    Private Sub Application_Quit()
        Set objMeeting = Nothing
    End Sub
    
    Private Sub Application_Startup()
         Set objMeeting = New clsMeeting
    End Sub
    
    Private WithEvents olkIns As Outlook.Inspectors, _
            WithEvents olkApt As Outlook.AppointmentItem
    
    Private Sub Class_Initialize()
        Set olkIns = Application.Inspectors
    End Sub
    
    Private Sub Class_Terminate()
        Set olkIns = Nothing
    End Sub
    
    Private Sub olkApt_Unload()
        Set olkApt = Nothing
    End Sub
    
    Private Sub olkIns_NewInspector(ByVal Inspector As Inspector)
        If Inspector.CurrentItem.Class = olAppointment Then
            Set olkApt = Inspector.CurrentItem
    
                If Len(olkApt.Location) > 0 Then
    
                Else
                    olkApt.Location = "(default)"
                End If
    
        End If
    End Sub
    

2 个答案:

答案 0 :(得分:0)

试试这个

Private Sub olkIns_NewInspector(ByVal Inspector As Inspector)
    If Inspector.currentItem.Class = olAppointment Then
        Set olkApt = Inspector.currentItem

        If olkApt.Saved = False Then

            If Len(olkApt.location) > 0 Then

            Else
                olkApt.location = "(default)"
            End If
        End If

    End If

    Set olkApt = Nothing

End Sub

答案 1 :(得分:0)

olkApt.Saved = False的使用在此实例中不起作用,因为新约会的值始终为True。相反,尝试:

Private Sub olkIns_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olAppointment Then
        Set olkApt = Inspector.CurrentItem
        If olkApt.CreationTime = #1/1/4501# Then
            olkApt.Location = DEFAULT_LOCATION
        End If
    End If
End Sub
  
    

更新:我已实施此代码并且效果很好......除非我与与会者创建了日历邀请。保存事件后,我执行拖放操作以更改事件日期/时间。我被提示保存并发送通知,我这样做;然而,事件的视觉放置"跳跃"回到原始位置,即使事件的内容仍然显示新修改的日期/时间。

  

所以,我有一个日历事件,日历屏幕上的视觉表示与事件的细节不匹配。

有关于此的任何想法吗?