我对VB脚本很陌生,所以我可能错过了很简单的东西。
我有一个excel电子表格,其中两张不同的表格上有两个表格,我正在尝试将结果作为文本加入到另一个表格中。
我正在使用以下示例VB,导致下标超出范围错误。
Sub ColCars_with_table()
Dim myTableCars As ListObject
Dim myTableColours As ListObject
Dim carAlias As Variant
Dim colourAlias As Variant
Dim x As Long
Dim y As Long
Set myTableCars = Sheets("Cars").ListObjects("CarTable")
Set myTableColours = Sheets("Colours").ListObjects("ColourTable")
carAlias = myTableCars.ListColumns(1).DataBodyRange
colourAlias = myTableColours.ListColumns(1).DataBodyRange
For x = LBound(carAlias) To UBound(carAlias)
For y = LBound(colourAlias) To UBound(colourAlias)
MsgBox ("Colour and make is " & colourAlias(y) & " " & carAlias(x))
Next y
Next x
如果我将VB转换为直接数组,我可以让它工作:
Sub ColCars_without_table()
'this works
carAlias = Array("Subaru", "Toyata", "Ferrari", "Volkswagen", "Audi", "BMW", "Fiat", "Mazda")
colourAlias = Array("Red", "Blue", "Yellow")
For x = LBound(carAlias) To UBound(carAlias)
For y = LBound(colourAlias) To UBound(colourAlias)
MsgBox ("This is a " & colourAlias(y) & carAlias(x)) 'this will produce the correct results
Next y
Next x
End Sub
我可能在从表格中获取数据的方式做了一些根本性的错误,希望有人能够引导我朝着正确的方向前进。
答案 0 :(得分:-1)
我建议使用named range
来定义颜色和汽车,然后通过命名范围在VBA中填充变体数组。
使用此方法的第一步是导航到功能区中的Formulas -> Name Manager
和create two named ranges,一个用于您的汽车,另一个用于您的颜色。
一旦定义了命名范围,您就可以在下面的代码中引用它们
Sub ColCars_without_table()
Dim carArray() As Variant
Dim colorArray() As Variant
carArray = Range("Cars") 'Populates variant array with values from Cars Named Range
colorArray = Range("Colors") 'Populates variant array with values from Colors Named Range
For x = LBound(carArray, 1) To UBound(carArray, 1)
For y = LBound(colorArray, 1) To UBound(colorArray, 1)
MsgBox ("This is a " & colorArray(y, 1) & carArray(x, 1))
Next y
Next x
End Sub
答案 1 :(得分:-1)
我可能正在从表格中获取数据的方式做出根本性的错误
不,但我认为你在如何迭代你的范围数组方面做错了。范围数组始终二维,即使它是单列或单行的范围。如果是单列,请执行以下操作:
carAlias = Application.Transpose(myTableCars.ListColumns(1).DataBodyRange)
如果范围是行,则必须对其进行双转置,即:
Dim headerRow as Variant
headerRow = Application.Transpose(Application.Transpose(myTableCars.HeaderRowRange))
然后你将得到一个不会引起SOOR错误的一维数组。
在这种情况下,SOOR错误会引发,因为你已经在数组中要求一个元素而没有指定这两个维度。