将数组的值输出到邮件正文

时间:2015-10-20 17:45:56

标签: excel vba excel-vba loops

我正在努力使用VBA逻辑来构建具有未定义数量的名称的邮件正文。名称位于“名称”列“D”中,应列在电子邮件正文中。

这应该取名并将它们放在一个数组中,从“D”列的第2行开始。

Dim i As Integer
Dim j As Integer
Dim cellValue() As String

i = 2
j = 2

Do Until IsEmpty(Cells(i,4))
    cellValue(i) = Cells(i, 4).Value
    i = i + 1
Loop

位于邮件正文中:

"Names : "
Do While j <= i
    "Name " & cellValue(j)
    j = j + 1
Loop

我无法在电子邮件中获得任何姓名,但我仍然拥有电子邮件的其他部分。

2 个答案:

答案 0 :(得分:0)

nwhaught 是对的,您必须使用 ReDim 语句重新分配数组变量的存储空间。

试试这个:

Dim i As Integer
Dim j As Integer
Dim cellValue()
Dim x : x = 0

i = 2
j = 2

Do Until IsEmpty(Cells(i,4))
    ReDim Preserve cellValue(x)
    cellValue(x) = Cells(i, 4).Value
    x = x + 1
    i = i + 1
Loop

在您的电子邮件正文中:

For j = LBound(cellValue) To UBound(cellValue)
    "Name " & cellValue(j)
Next  

有关ReDim的详细信息,请查看this this 链接。

答案 1 :(得分:0)

我会省你搜索的麻烦......

Dim i As Integer
Dim j As Integer
Dim cellValue() As String

i = 2
j = 2

Do Until IsEmpty(Cells(i,4))
    ReDim Preserve cellValue(i)
    cellValue(i) = Cells(i, 4).Value
    i = i + 1
Loop

然后在电子邮件正文中:

sBody = "Names : "
Do While j <= i
    sBody = sBody & vbNewLine & "Name " & cellValue(j)
    j = j + 1
Loop

'assume you already have this, but for illustration purposes
Set oApp = CreateObject("Outlook.Application")
Set oMail = oApp.CreateItem(olMailItem)

With oMail
   .To = 'whomever
   .Body = sBody
End With

使用.Body属性不允许非常好的格式化。如果您需要,请查看.HTMLBody以及如何将HTML嵌入到字符串中,以便根据需要对其进行格式化。