仅在指定邮件主题时才执行宏

Execute macro only if specific mail subject is given

我编写了一个宏,只要邮件主题包含特定单词,它就会将收到的邮件的内容提取到 excel sheet 中。总而言之,它的工作原理是,宏的第一部分在我收到邮件后立即执行(无论邮件的主题是什么)。这导致我每次收到邮件时都会在 outlook 中弹出 window,但我只希望它在收到包含特定主题内容的邮件时弹出。具体的,我必须为以下行找到另一个解决方案:

If TypeName(item) = "MailItem" Then Set olMail = item

完整代码如下:

Private Sub olItems_ItemAdd(ByVal item As Object)

'Variablen dimensionieren
Dim olMail As Outlook.MailItem
Dim oxLApp As Object, oxLwb As Object, oxLws As Object


Set oxLApp = GetObject(, "Excel.Application")
Set oxLwb = oxLApp.Workbooks.Open _
("C:\Users\A2000\Desktop\Makros_NewScoping")
Set oxLws = oxLwb.Sheets("Slide 3")

'Prüfen ob Item eine Mail ist
If TypeName(item) = "MailItem" Then

    
    Set olMail = item
    
If InStr(olMail.Subject, "APPROVAL REQUIRED") And _
olMail.SenderName = "Test, Name" Then

With oxLws

    .Range("Q24") = olMail.VotingResponse
    .Range("E41") = olMail.Body
    

End With
End If

您需要将打开 Excel 的代码移动到检查服务器和主题的 If 语句下方。

如果收到的邮件不符合您的条件,则无需 运行 任何额外代码:

Private Sub olItems_ItemAdd(ByVal item As Object)

  'Variablen dimensionieren
  Dim olMail As Outlook.MailItem
  Dim oxLApp As Object, oxLwb As Object, oxLws As Object

  'Prüfen ob Item eine Mail ist
  If TypeName(item) = "MailItem" Then
    Set olMail = item
    
    If InStr(olMail.Subject, "APPROVAL REQUIRED") And _
olMail.SenderName = "Test, Name" Then

       Set oxLApp = GetObject(, "Excel.Application")
       Set oxLwb = oxLApp.Workbooks.Open _
("C:\Users\A2000\Desktop\Makros_NewScoping")
       Set oxLws = oxLwb.Sheets("Slide 3")

       With oxLws

         .Range("Q24") = olMail.VotingResponse
         .Range("E41") = olMail.Body
    
       End With
     End If

请注意,每次将新项目添加到文件夹时都创建一个新的 Excel 实例并不是一个好主意。此外,ItemAdd 事件不仅针对传入电子邮件触发,而且针对移动到文件夹的每封电子邮件触发。因此,当项目移动到文件夹时,您将触发代码。

这就是为什么我建议处理 Application class 的 NewMailEx 事件。对于 Microsoft Outlook 处理的每个接收项目,此事件都会触发一次。该项目可以是几种不同项目类型中的一种,例如 MailItemMeetingItemSharingItemEntryIDsCollection 字符串包含对应于该项目的条目 ID。使用 EntryIDCollection 字符串表示的条目 ID 调用 NameSpace.GetItemFromID 方法并处理项目。