创建要在电子邮件正文

时间:2018-05-30 07:35:25

标签: arrays vba excel-vba loops email

我对vba很新,并希望能得到一些帮助。 我需要创建一个代码来生成依赖于Excel工作表的电子邮件。 目前,我管理的一切除了下面的一点,我被困在了。 excel包含一个选项列表,我们称之为a,b,c,d ... n。 在电子邮件正文中我想说:

OPTION1 a
OPTION2 b
OPTION3 c

所以我需要代码来计算它的选项号(选项的数量可以改变,有时8,更多)并将其添加到word选项旁边。我想我需要创建一些循环,但真的不知道如何继续。 任何帮助将不胜感激。

这是代码,尝试创建循环。当我添加循环时,我的电子邮件返回一个空白。

'Getting the xRg

 On Error Resume Next
    xAddress = ActiveWindow.RangeSelection.Address
    Set FirstRange = Range("A12")
    Set LastRange = FirstRange.End(xlDown)
    Set xRg = Range(FirstRange, LastRange).SpecialCells(xlCellTypeVisible)
 If xRg Is Nothing Then Exit Sub
 Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
For I = 1 To xRg.Rows.Count
    For J = 1 To xRg.Columns.Count
        xEmailBody = xEmailBody & "  " & xRg.Cells(I, J).Value
    Next
    xEmailBody = xEmailBody & "<br/>"
Next
xEmailBody = vbLf & xEmailBody & "<br/>"

'Creating a loop for the legs
Dim a As integer
Dim option() As integer
For a = FirstRange To LastRange
    ReDim Preserve leg(a)
    option(a) = "leg" & a

接下来

这是循环编辑的代码,但仍无效......请帮助

Dim leg(0 To 15) As Range

Dim a As Range
For a = FirstRange To LastRange
   leg(a) = "Leg" & "[" & a & "]"
Next a

我的类型不匹配

这只会在电子邮件中返回任何内容:

Dim leg() As Variant
leg() = Range(FirstRange, LastRange).Value

Dim a As Variant
For a = FirstRange To LastRange
    leg(a) = "Leg" & "[" & a & "]"
Next a

1 个答案:

答案 0 :(得分:1)

目前还不是很清楚你到底要做什么,所以我根据你的代码可以推断出一些猜测。

更改此

Dim leg(0 To 15) As Range

Dim a As Range
For a = FirstRange To LastRange
   leg(a) = "Leg" & "[" & a & "]"
Next a

这样的事情:

Dim leg(0 To 15) As String

Dim a As Long
For a = FirstRange.Row To LastRange.Row
   leg(a) = "Leg" & "[" & a & "]"
Next a

按顺序,问题是:

  1. a如果要在Range循环中将其用作计数器,则不能为For数据类型(除非您使用For Each )。 For a = ...表示a必须是数字,因此IntegerLong在实践中。

  2. 在上述情况下,当你说“从第一个范围到第二个范围”时,VBA并不理解你的意思,作为{{1} } object有许多属性(默认属性为Range,而不是ValueAddress)。

  3. 您试图将Row值分配给String数组。数组只能包含与其自身具有相同数据类型的项目(Range除外,它可以容纳任何内容)。

  4. 在你的第二次尝试中你离得更近了,但是上面的#2也适用于那里,另外,你没有正确设置数组的大小,因此不可能填充它。

    替代解决方案(虽然我根据您的数据集的外观做出假设,但我认为它可能更接近您的需求):

    Variant

    翻译成人类语言:

    1. 查看Dim leg(0 To 15) As String Dim a As Range, b As Long: b = 0 For Each a In xRg leg(b) = "Leg[" & a.Value & "]" b = b + 1 Next a 表示的每个元素(单元格),范围为a(您之前的代码定义为从xRgFirstRange)。< / LI>
    2. 将此元素中包含的一些文本和值添加到数组LastRange
    3. 将值添加到leg()后,递增计数器,以跟踪我们要为其添加值的数组部分。
    4. 代码不包含错误检查或数组大小调整,这意味着如果leg()包含超过16个单元格,您将收到out of range或类似错误。