VBA-在数组中无意中创建数组

时间:2018-12-05 11:02:12

标签: arrays excel vba variant jagged-arrays

下面是我正在编写的一些代码的摘录,这些代码试图将流程开始时的范围(在工作表激活事件中捕获在全局数组中)与工作表停用时的范围进行比较。

这是激活代码:

Private Sub Worksheet_Activate()

garr_Agency = Array(Range("rng_Lst_Agencies").Value2) 'rng_Lst_Agencies is a 1D column.

End Sub

这是停用:

Private Sub Worksheet_Deactivate()

Dim arr_Agency() As Variant
Dim rng_Agency As Range
Dim lng_Agencies As Long
Dim lng_i As Long

Set rng_Agency = Range("rng_Lst_Agencies")

arr_Agency = Array(rng_Agency.Value2)

lng_Agencies = rng_Agency.Cells.Count
lng_i = 1

Do Until lng_i = lng_Agencies + 1
            If arr_Agency(0)(lng_i, 1) <> garr_Agency(0)(lng_i, 1) Then 
*rest of the code*

我以为我可以使用:

If arr_Agency(lng_i, 1) <> garr_Agency(lng_i, 1) Then

但是出现“下标超出范围”错误。

为什么我需要添加额外的“(0)”?从“本地”窗口中,好像我已经沿着直线在某个数组中创建了一个数组,但是我不知道如何。

非常感谢。

1 个答案:

答案 0 :(得分:0)

获得嵌套数组的原因是由于以下这一行:

arr_Agency = Array(rng_Agency.Value2)

执行此操作:

arr_Agency = rng_Agency.Value2

这将创建一维数组,因为当您将变量分配给变量时,它会自动被视为数组。