我对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
答案 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
按顺序,问题是:
a
如果要在Range
循环中将其用作计数器,则不能为For
数据类型(除非您使用For Each
)。 For a = ...
表示a
必须是数字,因此Integer
或Long
在实践中。
在上述情况下,当你说“从第一个范围到第二个范围”时,VBA并不理解你的意思,作为{{1} } object有许多属性(默认属性为Range
,而不是Value
或Address
)。
您试图将Row
值分配给String
数组。数组只能包含与其自身具有相同数据类型的项目(Range
除外,它可以容纳任何内容)。
在你的第二次尝试中你离得更近了,但是上面的#2也适用于那里,另外,你没有正确设置数组的大小,因此不可能填充它。
替代解决方案(虽然我根据您的数据集的外观做出假设,但我认为它可能更接近您的需求):
Variant
翻译成人类语言:
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
(您之前的代码定义为从xRg
到FirstRange
)。< / LI>
LastRange
。leg()
后,递增计数器,以跟踪我们要为其添加值的数组部分。代码不包含错误检查或数组大小调整,这意味着如果leg()
包含超过16个单元格,您将收到out of range
或类似错误。