vba提示下标越界,如何解决?

crr(s, j) = arr(i, n)这句提示下标越界

Sub abc()
Dim arr, brr, crr, d, i&, j&, s&, k&, n%
Set d = CreateObject("scripting.dictionary")
arr = Sheet1.Range("a1").CurrentRegion
brr = Sheet2.Range("a1").CurrentRegion
ReDim crr(1 To 20000, 1 To 13)
For j = 1 To UBound(arr, 2)
d(arr(1, j)) = j
Next
For i = 2 To UBound(arr)
If arr(i, 10) = "12" Or arr(i, 10) = "33" Then
s = s + 1
For j = 1 To UBound(brr, 2)
n = d(brr(1, j))
crr(s, j) = arr(i, n)
Next
End If
Next
For k = 1 To UBound(crr)
crr(k, 12) = "ok"
Next
Sheet2.Range("a2").Resize(s, UBound(crr, 2)) = crr
MsgBox "已完成! "
End Sub

crr(s, j) = arr(i, n)这句提示下标越界

关于数组越界问题相对比较好处理
当报错的时候选择调试,会发现代码行有一行变黄,即楼主复制的crr(s, j) = arr(i, n)
此时,将鼠标左键分别滑动到具体数组以及变量放,会发现具体报错的数组,以及变量数值
然后再检查数组赋值部分,根据实际调整即可
arr = Sheet1.Range("a1").CurrentRegion取区域赋值给数组时,一定要注意CurrentRegion的范围,建议楼主检查检查
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-03-22
ReDim crr(1 To 20000, 1 To 13)增加可以追问

没看懂

相似回答