Я создал рабочую книгу, которую моя команда использует для отправки сообщений по электронной почте на предмет ошибок.Чтобы мы могли проверить работоспособность, я должен показывать только электронную почту, а не отправлять ее, поэтому я активирую лист, с которого отправляется сообщение.Я хочу определить, когда письмо отправлено, затем вернуть пользователя на главный лист и установить для свойства 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