【发布时间】:2020-02-16 20:17:05
【问题描述】:
我有一个列表,其中包含:
- 客户
- 经理电子邮件
- 总经理邮箱
我正在尝试使用 VBA 和 Outlook 发送电子邮件,每次循环找到一个经理(我正在检查电子邮件地址)时,它都会发送为该经理列出的每个客户。
如果分行没有列出经理的电子邮件地址,则该电子邮件应发送给主管(例如,分行 1236 会收到一封电子邮件,发送给主管,其中有几个客户)。
电子邮件正文将包含预先格式化的文本,然后是工作表列表和客户列表。
我遇到了一些麻烦:
a) 列出从工作表到邮件正文的分行客户
b) 在第一封电子邮件之后从下一个经理跳转,而不是每次循环找到同一个经理时都为同一个经理重复电子邮件
c) 记录发送到 J 列的邮件
这是一张包含一些报告的表格: https://drive.google.com/file/d/1Qo-DceY8exXLVR7uts3YU6cKT_OOGJ21/view?usp=sharing
我的循环有点工作,但我相信我需要一些其他方法来实现这一点。
Private Sub CommandButton2_Click() 'envia o email com registro de log
Dim OutlookApp As Object
Dim emailformatado As Object
Dim cell As Range
Dim destinatario As String
Dim comcopia As String
Dim assunto As String
'Dim body_ As String
Dim anexo As String
Dim corpodoemail As String
'Dim publicoalvo As String
Set OutlookApp = CreateObject("Outlook.Application")
'Loop para verificar se o e-mail irá para o gerente da carteira ou para o gerente geral
For Each cell In Sheets("publico").Range("H2:H2000").Cells
If cell.Row <> 0 Then
If cell.Value <> "" Then 'Verifica se carteira possui gerente.
destinatario = cell.Value 'Email do gerente da carteira.
Else
destinatario = cell.Offset(0, 1).Value 'Email do Gerente Geral.
End If
assunto = Sheets("CAPA").Range("F8").Value 'Assunto do e-mail, conforme CAPA.
'publicoalvo = cell.Offset(0, 2).Value
'body_ = Sheets("CAPA").Range("D2").Value
corpodoemail = Sheets("CAPA").Range("F11").Value & "<br><br>" & _
Sheets("CAPA").Range("F13").Value & "<br><br>" ' & _
Sheets("CAPA").Range("F7").Value & "<br><br><br>"
'comcopia = cell.Offset(0, 3).Value 'Caso necessário, adaptar para enviar email com cópia.
'anexo = cell.Offset(0, 4).Value 'Caso necessário, adaptar para incluir anexo ao email.
'Montagem e envio dos emails.
Set emailformatado = OutlookApp.CreateItem(0)
With emailformatado
.To = destinatario
'.CC = comcopia
.Subject = assunto
.HTMLBody = corpodoemail '& publicoalvo
'.Attachments.Add anexo
'.Display
End With
emailformatado.Send
Sheets("publico").Range("J2").Value = "enviado"
End If
Next
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
【问题讨论】:
标签: excel vba loops email outlook