通过电子邮件发送工作表内容

时间:2018-06-26 15:19:28

标签: vba email

我正在使用此代码创建电子邮件 但是,我想发送的内容在A5到B100范围内,如下所示: A5 B5 A6 B6 ... A100 B100

你有什么建议? 当前代码,如下所示:

Public Function Sendemail()
On Error GoTo Ende
esubject = "CBP Review for Approval"
sendto = Range("G1") & Range("H1")
ccto = Range("G1")
ebody = "Please see below a" & vbNewLine & Range("A5") & " " & Range("B5") &             vbCrLf & "Best regards" & vbCrLf & "Your Partner"

Set app = CreateObject("Outlook.Application")
Set itm = app.CreateItem(0)

With itm
.Subject = esubject
.To = sendto
.CC = ccto
.Body = ebody
.Display
End With
Set app = Nothing
Set itm = Nothing

现在,只写A5和B5,但是需要循环才能写其他的 非常感谢

2 个答案:

答案 0 :(得分:0)

您可以使用For循环来一次建立一行消息正文。替换以下行:

SELECT
    MIN([INDEX]) as MIN,
    AVG([INDEX]) as avg,
    MAX([INDEX]) as max
  FROM [data].[dbo].[db_DATA]
 WHERE [INDEX] between '2017-02-20' AND '2017-02-25'

具有以下代码:

ebody = "Please see below a" & vbNewLine & Range("A5") & " " & Range("B5") &             vbCrLf & "Best regards" & vbCrLf & "Your Partner"

请注意串联的两种不同用法(ebody = "Please see below a" & vbNewLine For i = 5 To 100 If Range("A" & i) <> "" or Range("B" & i) <> "" Then ebody = ebody & Range("A" & i) & " " & Range("B" & i) & vbCrLf End If Next i ebody = ebody & "Best regards" & vbCrLf & "Your Partner" 运算符),一种是在现有正文中添加新行:

&

和另一个在每行上创建单元格引用。循环内的ebody = ebody & "more text to add..." 将导致将单元格A5至A100(以及类似的B5至B100)添加到邮件中。

最后,If语句将确保仅将具有单元格A或B中的数据的行添加到您的电子邮件中。

答案 1 :(得分:0)

我写出了答案,但是您的问题表明您已经知道必须做什么。为什么不只是查找呢? google search "vba loop"

的第一个结果

可以使用UsedRange.Rows.Count获得最后一行。如果循环超出数据范围或有空白,则将取消对if语句的注释。因此,您最终不会得到一堆换行符。

Dim sData as string

For iRowCounter = 5 to ??
    'if Range("A" & iRowCounter) <> "" or Range("B" & iRowCounter) <> "" then
        sData = sData & Range("A" & iRowCounter) & " " & Range("B" & iRowCounter) & vbNewline
    'end if
Next

eBody = "Please see..." & vbnewline & sData & "Best Regards..."