为什么这样:
Dim Arr As Variant
p = 1
For i = 1 To LRow
If Sheets("Data").Range("U" & 4 + i).Value > 0 Then
ReDim Preserve Arr(1 To p, 1 To 2)
Arr(p, 1) = Sheets("Data").Range("U" & 4 + i).Value
Arr(p, 2) = Sheets("Data").Range("N" & 4 + i).Value
p = p + 1
End If
Next
导致ReDim线上的“运行时错误9 - 下标超出范围”? 我不知道进入for循环之前的数组行数。列号应始终为2.尽管如此,使用1D阵列可以做同样的事情! 有什么帮助吗?
答案 0 :(得分:2)
如上所述,您只能重新保留最后一个维度。
但您也可以使用其他方法查找所需的“行”数,并在重新设置数组之前设置它:
Dim Arr As Variant
p = 1
dim rws as long
rws = Application.WorkSheetFunction.CountIf(Sheets("Data").Range("U5:U" & Lrow+4),">0")
Redim Arr(1 to rws,1 to 2)
For i = 1 To LRow
If Sheets("Data").Range("U" & 4 + i).Value > 0 Then
Arr(p, 1) = Sheets("Data").Range("U" & 4 + i).Value
Arr(p, 2) = Sheets("Data").Range("N" & 4 + i).Value
p = p + 1
End If
Next
答案 1 :(得分:1)
如果您使用ReDim Preserve
,则只能调整数组的最后一个维度。
见这里:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/redim-statement
如果您正在寻找解决方案,那么您可以将数组交换为Arr(2,p)
,因为您说列号始终为2。