VBA动态数组下标错误

时间:2017-06-10 20:00:54

标签: excel vba excel-vba

我试图从excel表中获取一些值,然后处理它们,我决定使用Dynamic数组,因为我认为它会更容易。

Dim Dias() As Variant
Dim Horas() As Variant
Dim Temp() As Variant
Dim Hum() As Variant

Sheets("Tfinal").Activate
Dias = Range("A2:A1745")
Horas = Range("B2:B1745")
Temp = Range("J2:J1745")

Sheets("Hfinal").Activate
Hum = Range("D2:D1745")

Dim TempNTemp() As Double
Dim NTemp() As Double
Dim NDias() As Variant
Dim NHoras() As Variant
Dim TempNHum() As Variant
Dim NHum() As Variant

直到这里一切都很好,但下一行抛出下标超出范围错误。我真的很困惑。

H = Horas(0)

1 个答案:

答案 0 :(得分:3)

从一系列单元格始终获取值会产生具有基于1的索引的二维数组。如果在单个列中使用多个单元格,则仍会获得1到x,1到1的数组;如果你在一行中使用多个单元格,你将获得1比1,1比1的数组。

你的数组是LBound / UBound /排名如下:

Dias = Range("A2:A1745")    1 to 1744, 1 to 1
Horas = Range("B2:B1745")   1 to 1744, 1 to 1
Temp = Range("J2:J1745")    1 to 1744, 1 to 1
Hum = Range("D2:D1745")     1 to 1744, 1 to 1

因此,要访问第一级Horas数组的第一个元素,请使用以下其中一项:

Horas(1, 1)
Horas(LBound(Horas, 1), 1)

说实话,第二级的默认值是1,所以没必要。这些也可以。

Horas(1)
Horas(LBound(Horas))

然而,如果你有超过一个等级,使用这种速记可能会引起混淆。

Horus = Range("A1:G1")
'first element
Horas(1, 1)
Horas(1, LBound(Horas, 2))
'second element
Horas(1, 2)

在数组var上设置观看会显示尺寸和内容。

我还在过程中使用以下代码在“立即”窗口中直观地查看数组的尺寸。

debug.print lbound(Horus, 1) & ":" & ubound(Horus, 1)
debug.print lbound(Horus, 2) & ":" & ubound(Horus, 2)
'results for Horus
1:1744
1:1