我难以在循环中标注一个关键变量 - 当我使用绝对单元格引用(即A1)时它很好,但是当我标注相对值(即(i,j))它失败时 - 即使我可以把这个值称为单元格没问题。
任何想法都非常感激...... 干杯 丹
示例:
此有效:
Sub Test(ARRAYX)
Dim i As Integer, j As Integer
With Workbooks("X.xlsb").Sheets("X")
i = 50 'rows
Do Until i = 51
For j = 30 To 650 Step 30 'cols
Dim NUM as integer
NUM = activesheet.range("A1")
Workbooks("X.xlsb").Sheets("X").Cells(i - 48, j).value = ARRAYX(NUM, 2)
Next j
i = i + 1
Loop
End With
End Sub
此不起作用:
Sub Test(ARRAYX)
Dim i As Integer, j As Integer
With Workbooks("X.xlsb").Sheets("X")
i = 50 'rows
Do Until i = 51
For j = 30 To 650 Step 30 'cols
Dim NUM as integer
NUM = Workbooks("X.xlsb").Sheets("X").Cells(i, j).value
Workbooks("X.xlsb").Sheets("X").Cells(i - 48, j).value = ARRAYX(NUM, 2)
Next j
i = i + 1
Loop
End With
End Sub
答案 0 :(得分:4)
当抛出错误时,问题显然与NUM
的值无关; NUM
超出了ARRAYX
的范围。
根据您的发现添加错误处理和调试:
On Error GoTo ErrHandler
'your code
Exit Sub
ErrHandler:
MsgBox "Max legal value for 'NUM' is:" & UBound(ARRAYX,1) & vbNewLine _
& "The value of 'NUM' is: " & NUM & vbNewLine _
& "Taken from cell (" & i & "," & j & ")" & vbNewLine _
& "Fix the data in the worksheet and try again."
它适用于A1
,因为单元格A1
中的值是ARRAYX
数组的合法索引。它以(i,j)
失败,因为单元格(i,j)
中的值超出了数组的边界。
阅读评论,需要揭穿一些事情:
Cells("A1")
不是绝对引用。 Cells("$A$1")
是。 “绝对引用”是指表达单元格地址的方式;绝对列($A
)和绝对行($1
)。无论您是否使用绝对单元格引用都没有任何区别。Dim
语句不可执行:VBA在该过程中运行单行之前为过程的声明分配内存空间。由于这个原因,逐步执行代码(在调试时 F8 )会跳过Dim
语句(您不能在Dim
语句中中断)。过程内的代码块不是范围:在If
或With
或Do
内或其他任何可能的代码块中声明的变量与在此处声明的任何变量的范围相同。一个程序的顶部。