我正在努力使用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
我无法在电子邮件中获得任何姓名,但我仍然拥有电子邮件的其他部分。
答案 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
答案 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
嵌入到字符串中,以便根据需要对其进行格式化。