VBA - 无意中在一个数组中创建了一个数组
VBA - Unintentionally creating an array within an array
下面是我正在编写的一些代码的摘录,这些代码试图将进程开始时的范围(在 sheet 激活事件的全局数组中捕获)与 sheet 已停用。
这里是激活码:
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
但我收到 "Subscript out of range" 错误。
为什么我需要添加额外的“(0)”?从当地人看来 window 看起来好像我已经在沿线某处的数组中创建了一个数组,但我不知道怎么做。
非常感谢。
您获得嵌套数组的原因是因为这一行:
arr_Agency = Array(rng_Agency.Value2)
改为这样做:
arr_Agency = rng_Agency.Value2
这将创建一个一维数组,因为当您分配给一个变体时,它会自动被视为一个数组。
下面是我正在编写的一些代码的摘录,这些代码试图将进程开始时的范围(在 sheet 激活事件的全局数组中捕获)与 sheet 已停用。
这里是激活码:
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
但我收到 "Subscript out of range" 错误。
为什么我需要添加额外的“(0)”?从当地人看来 window 看起来好像我已经在沿线某处的数组中创建了一个数组,但我不知道怎么做。
非常感谢。
您获得嵌套数组的原因是因为这一行:
arr_Agency = Array(rng_Agency.Value2)
改为这样做:
arr_Agency = rng_Agency.Value2
这将创建一个一维数组,因为当您分配给一个变体时,它会自动被视为一个数组。