【问题标题】:Code ignores incoming Meeting request代码忽略传入的会议请求
【发布时间】:2020-06-25 15:32:38
【问题描述】:

我有一个处理任何传入项目的 Outlook 代码,如果通过了给定条件,则将仅从邮件项目在 Outlook 日历中创建一个新约会。

代码不区分邮件项目和会议请求项目。这会导致系统在 1899 年根据会议项目创建一个新会议,而不是忽略这一点。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

On Error Resume Next
Set ns = Application.Session
arr = Split(EntryIDCollection, ",")


For i = 0 To UBound(arr)
    Set itm = ns.GetItemFromID(arr(i))

    If (itm.Class = olMail) Then

        Set objMail = itm

        If objMail.Subject = "Approved" And objMail.Sender = "x@mail.com" Then

           Set Reg1 = New RegExp

           With Reg1
                   .Pattern = "([0-9]{2})(.)([0-9]{2})(.)([0-9]{4})(\s)(\W)(\s)([0-9]{2})(.)([0-9]{2})(.)([0-9]{4})"
                   .Global = True
           End With

           If Reg1.test(objMail.Body) Then

                Set M1 = Reg1.Execute(objMail.Body)

                For Each m In M1

                Set objAppt = Application.CreateItem(olAppointmentItem)
                Set objInsp = objAppt.GetInspector
                Set objDoc = objInsp.WordEditor
                Set objSel = objDoc.Windows(1).Selection

                Next
            End if
            .....

 End Sub

【问题讨论】:

  • The documentation 建议您设置MeetingRequest property - objAppt.MeetingStatus = olMeeting
  • 那么具体的问题是什么?检查“如果(itm.Class = olMail)然后”告诉您它是邮件项目,而它是会议项目?
  • 在邮箱中发送和接收会议请求后,预期结果是它将失败,因为只有邮件要处理,即。没有创建会议。现在的实际结果是创建了一个主题行为空、位置行为空且开始时间为 30.12.1899 和结束时间为 29.12.1899 的全天事件。事件正文还包括处理邮件的部分代码
  • Remove On Error Resume Next 以便您查看错误。如果有错误更新问题。
  • 好主意。运行时错误“13”,itm 变量的类型不匹配

标签: vba outlook


【解决方案1】:

基于OP的评论“运行时错误'13',itm变量的类型不匹配”和开发问题的解决方案,问题的答案很可能修复了On Error Resume Next的误用并设置启动编辑器以在每个模块上生成 Option Explicit。

那么编程更改应该是:

Dim itm As Object
Dim objMail As MailItem

【讨论】:

    【解决方案2】:

    您需要通过以下方式检查传入项目的Class属性:

      If (itm.Class = olMail) Then
    
        Set objMail = itm
        ...
      End If 
    
      If (itm.Class = olMeetingRequest) Then
    
        Set objMeeting = itm
        ...
      End If 
    

    【讨论】:

    • 我创建了基本日志并对其进行了测试。它适用于传入的邮件,写入类 43。但这个问题是代码无法识别 olMeetingRequest 类。它完全忽略它。它不会在日志中写入任何内容。 If itm.Class = olMeetingRequest Then ws.Range("E" & lr) = itm.Class End If
    【解决方案3】:

    在另一个thread的帮助下解决了。

    Dim itm As Object
    Dim oMail As MailItem
    
    If TypeName(itm) = "MailItem" Then
    
       Set oMail = itm
       ....
    End if 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多