2017-08-07 16 views
0

我有一个处理任何传入项目的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 = "[email protected]" 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 
+1

[文档](https://msdn.microsoft.com/VBA/Outlook-VBA/articles/create-an-appointment-as-a-会议在日历上)建议您应设置[MeetingRequest属性](https://msdn.microsoft.com/VBA/Outlook-VBA/articles/appointmentitem-meetingstatus-property-outlook) - 'objAppt.MeetingStatus = olMeeting' – stuartd

+0

那么确切的问题是什么?检查“If(itm.Class = olMail)Then”告诉你它是一个邮件项目,而它是一个会议项目? –

+0

在邮箱中发送并接收到会议请求后,预期的结果是,由于只处理邮件,因此它将失败,因为只有邮件需要处理。没有会议被创建。现在的实际结果是创建了空主题行,空位置行和开始时间30.12.1899和结束时间29.12.1899的全天事件。此外,事件正文还包含处理邮件的部分代码 –

回答

0

基础上OP的评论“运行时错误‘13’,对于ITM变量类型不匹配”,并解决发展问题,这个问题的答案很可能固定在错误恢复的滥用接下来,设置编辑器在每个模块上生成Option Explicit。

编程变化应然后是:

Dim itm As Object 
Dim objMail As MailItem 
0

你需要检查传入项目的Class财产以下列方式:

If (itm.Class = olMail) Then 

    Set objMail = itm 
    ... 
    End If 

    If (itm.Class = olMeetingRequest) Then 

    Set objMeeting = itm 
    ... 
    End If 
+0

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

0

解决与另一thread帮助。

Dim itm As Object 
Dim oMail As MailItem 

If TypeName(itm) = "MailItem" Then 

    Set oMail = itm 
    .... 
End if