【发布时间】:2023-01-31 01:08:51
【问题描述】:
目的是发送一封包含代码返回的所有值的电子邮件。
输出是最后一个值而不是电子邮件中的所有值。
Sub Email()
Dim Outlook, OutApp, OutMail As Object
Dim EmailSubject As String, EmailSendTo As String, MailBody As String
Dim SigString As String, Signature As String, fpath As String
Dim Quarter As String, client() As Variant
Dim Alert As Date, Today As Date, Days As Integer, Due As Integer
Set Outlook = OpenOutlook
Quarter = Range("G4").Value
Set rng = Range(Range("G5"), Range("G" & Rows.Count).End(xlUp))
'Resize Array prior to loading data
ReDim client(rng.Rows.Count)
'Check column G for blank cells and return F cells
For Each Cell In rng
If Cell.Offset(0, 1).Value = "" Then
ReDim client(x)
Alert = Cell.Offset(0, 0).Value
Today = Format(Now(), "dd-mmm-yy")
Days = Alert - Today
Due = Days * -1
client(x) = Cell.Offset(0, -3).Value & " " & Cell.Offset(0, -1).Value
End If
Next
For x = LBound(client) To UBound(client)
List = client(x) & vbNewLine
List = List + List
Next x
'Check dates to send subject line'
If Days < 0 Then
mail = True
EmailSubject = Quarter & " Vat Returns are Overdue"
MailBody = "<p>The Vat Returns are overdue by " & Due & " Days. See the clients below: </p>" & List
ElseIf Days <= 14 Then
mail = True
EmailSubject = "Vat Returns are due within Two weeks"
MailBody = "<p>The Vat Returns are due in " & Days & " Days. See the clients below: </p>" & List
End If
'Fetch signature
SigString = Environ("appdata") & _
"\Microsoft\Signatures\.htm"
Signature = GetBoiler(SigString)
'Fetch link for file location
fpath = "K:
'Skip if mail=false
If mail = True Then
'Send Mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(o)
With OutMail
.Subject = EmailSubject
.To = ""
'.bcc
sHTML = "<HTML><BODY>"
sHTML = sHTML & "<p>Hi, </p>"
sHTML = sHTML & MailBody
sHTML = sHTML & "<p>If the Vat Return have been filed, please update the database using the link below.</p>"
sHTML = sHTML & "<A href='" & fpath & "'></A>"
sHTML = sHTML & "<p>Regards,</p>"
.HTMLBody = sHTML & Signature
.HTMLBody = .HTMLBody & "</BODY></HTML>"
.Display
End With
Set Outlook = Nothing
Set OutMail = Nothing
Set OutApp = Nothing
mail = False
EmailSendTo = ""
End If
End Sub
该代码返回 if 语句中的最后一个值并将其放入电子邮件中。
我想遍历数据范围。如果 G:G 列中的单元格为空,则返回 F:F 列中的单元格值。
我可以将多封电子邮件发送到一个电子邮件地址,每封电子邮件中有一个单元格值。
我想发送一封包含所有(多个)单元格值的电子邮件。
我去掉了个人信息,但这不会影响代码的运行。
【问题讨论】:
-
在
For each Cell in rng循环中,您引用了client(x),但是x直到For x = lbound(client) to ubound(client)中的循环之后才被赋予一个值。从它的外观来看,x的第一次使用将始终为 0,然后当您到达For x行时它仍将是 0,因为client数组将有一个lbound和ubound为 0 . -
@DarrenBartrup-Cook 在最后一个循环中 x 的值更改为 3。这个特定的 if 语句中有 3 个值。在 if 语句中调用它时是否可以显示所有 3 个值(检查主题行)?