Определить, когда Excel отправляет электронную почту через MailEnvelope, а не внешний вид - PullRequest
0 голосов
/ 28 декабря 2018

Я создал рабочую книгу, которую моя команда использует для отправки сообщений по электронной почте на предмет ошибок.Чтобы мы могли проверить работоспособность, я должен показывать только электронную почту, а не отправлять ее, поэтому я активирую лист, с которого отправляется сообщение.Я хочу определить, когда письмо отправлено, затем вернуть пользователя на главный лист и установить для свойства workbook.saved значение true (поскольку я автоматически сохраняю книгу, когда пользователь выбирает опцию отправки электронной почты, но при изменении листа становится лучшедумаю, что это не сохранено).Есть ли какой-нибудь способ захвата, когда Excel отправляет электронное письмо, чтобы я мог запустить макрос на основе этого?

Я попытался поместить код в подпункт Worksheet_Change листов, однако кажется, что отправка почты через excel / исчезновение MailEnvelope не учитываетсякак событие изменения рабочего листа.

Public Sub sendEmail()
'Working in Excel 2002-2016
'Adapted from https://www.rondebruin.nl/win/s1/outlook/bmail3.htm
    Dim emailSubject As String
    Dim emailUpdateNumber As Integer
    Dim emailUpdateType As String
    Dim emailTestAddress As Range
    Dim additionalEmails As String


    On Error GoTo StopMacro

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    setGlobalVariables ' sets all variables used in more than one sub
    copyComms
    finalCommsWs.Activate
    'Note: if the range is one cell it will send the whole worksheet, multicells will send range only
    Set sendRng = finalCommsWs.Range("A1")

    emailUpdateType = getEmailType


    emailSubject = emailUpdateType & " - " & emailCustomer & " - " & emailPriority & " - " & _
         emailTicketNo & " - " & emailDescription

    If runEmailRecipients <> "" Then
        additionalEmails = "; " & runEmailRecipients
    Else
        additionalEmails = ""
    End If

    'Create the mail and show it
    With sendRng

        ThisWorkbook.EnvelopeVisible = True
        With .Parent.MailEnvelope


            With .Item
                Select Case emailPriority
                    Case Is = "Case1"
                        If ValidUser Then
                            .SentOnBehalfOfName = "TeamNamme"
                            emailAddress = "Team@email"
                        Else
                            .SentOnBehalfOfName = "TeamNamme"
                            emailAddress = "Team@email"
                        End If
                        .BCC = "sampleEmailList" & additionalEmails
                    Case Is = "Case2"
                        .SentOnBehalfOfName = "TeamNamme"
                        emailAddress = "Team@email"
                        .BCC = "sampleEmailList" & additionalEmails
                    Case Else
                        .SentOnBehalfOfName = "TeamNamme"
                        emailAddress = "Team@email"
                        .BCC = "sampleEmailList" & additionalEmails
                End Select
                .CC = ""
                .Subject = emailSubject
            End With

        End With
    End With

StopMacro:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
setGlobalVariables

If sendingEmail = False And ThisWorkbook.EnvelopeVisible = False Then
    runWs.Activate
    ThisWorkbook.Saved = True
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...