Vba 发送电子邮件时运行宏

Vba 发送电子邮件时运行宏,vba,outlook,Vba,Outlook,我正在尝试编写一个宏,每当用户点击发送按钮时,它都会查看电子邮件的主题行 然而,我找不到任何文档,听这个按钮。因为现在我只是想让它在发送邮件时发送一个带有主题的MsgBox。有没有一种方法可以听这个按钮关于DOM的思考,然后点击启动一个宏。正如Siddharth建议的那样: 我已经写了一个小演示,检查一些条件,以决定是否应该取消发送操作。这可以扩展到做其他事情,如插入日期,保存邮件到某个文件夹 Option Explicit Private Sub Application_ItemSend(B

我正在尝试编写一个宏,每当用户点击发送按钮时,它都会查看电子邮件的主题行


然而,我找不到任何文档,听这个按钮。因为现在我只是想让它在发送邮件时发送一个带有主题的MsgBox。有没有一种方法可以听这个按钮关于DOM的思考,然后点击启动一个宏。

正如Siddharth建议的那样:

我已经写了一个小演示,检查一些条件,以决定是否应该取消发送操作。这可以扩展到做其他事情,如插入日期,保存邮件到某个文件夹

Option Explicit

Private Sub Application_ItemSend(ByVal objItem As Object, Cancel As Boolean)
    Dim mi As MailItem

    If TypeName(objItem) = "MailItem" Then
        Set mi = objItem

        Debug.Print mi.Subject

        check Cancel, Trim(mi.Subject) <> "", "Subject is empty!"
        check Cancel, Not isRecipient(mi, "John@Doe.net"), _
              "John is on our embargo list!"
    End If
End Sub

Private Sub check(ByRef Cancel As Boolean, cond As Boolean, msg As String)
    If Not (Cancel Or cond) Then
        Cancel = (MsgBox(msg & vbCrLf & "Cancel send operation?", _
                         vbYesNoCancel, "Confirm?") <> vbNo)
    End If
End Sub

Private Function isRecipient(mi As MailItem, forbidden As String) As Boolean
    Dim ret As Boolean
    Dim rc As Recipient

    ret = False

    For Each rc In mi.recipients
        If StrComp(rc.Address, forbidden, vbTextCompare) = 0 Then
            ret = True
            Exit For
        End If
    Next

    isRecipient = ret
End Function

正如悉达思所建议的那样:

我已经写了一个小演示,检查一些条件,以决定是否应该取消发送操作。这可以扩展到做其他事情,如插入日期,保存邮件到某个文件夹

Option Explicit

Private Sub Application_ItemSend(ByVal objItem As Object, Cancel As Boolean)
    Dim mi As MailItem

    If TypeName(objItem) = "MailItem" Then
        Set mi = objItem

        Debug.Print mi.Subject

        check Cancel, Trim(mi.Subject) <> "", "Subject is empty!"
        check Cancel, Not isRecipient(mi, "John@Doe.net"), _
              "John is on our embargo list!"
    End If
End Sub

Private Sub check(ByRef Cancel As Boolean, cond As Boolean, msg As String)
    If Not (Cancel Or cond) Then
        Cancel = (MsgBox(msg & vbCrLf & "Cancel send operation?", _
                         vbYesNoCancel, "Confirm?") <> vbNo)
    End If
End Sub

Private Function isRecipient(mi As MailItem, forbidden As String) As Boolean
    Dim ret As Boolean
    Dim rc As Recipient

    ret = False

    For Each rc In mi.recipients
        If StrComp(rc.Address, forbidden, vbTextCompare) = 0 Then
            ret = True
            Exit For
        End If
    Next

    isRecipient = ret
End Function
使用此私有子应用程序\u ItemSendByVal项作为对象,取消作为布尔值使用此私有子应用程序\u ItemSendByVal项作为对象,取消作为布尔值