在VBA编码中放置变量的位置?
要选择范围,我通常使用其他编码 但是,我尝试了下面的代码,它让我跟你一起查询。
以下是两段代码,一段不起作用 - (Sub sbRangeUsingLoop_01()
)和一段有效(Sub sbRangeUsingLoop_02()
)
Sub sbRangeUsingLoop_01()
' THIS CODE WAS MEANT TO SELECT RANGE B2(startCell):D2(lastCell)
' -INSTEAD, JUST CELL B2 IS SELECTED
Dim colNo As Integer
colNo = 2
Dim startCell As Range
Set startCell = Cells(2, 2) 'CELL B2
Dim lastCell As Range
Set lastCell = Cells(2, colNo) 'lastCell REFERS TO CELL B2 THROUGHOUT
' WHEN I HOVER CURSOR OVER IT IN STEP THROUGH DEBUG!
' ...YET colNo GETS INCREMENTED WHEN I HOVER CURSOR OVER
' IT IN STEP THROUGH DEBUG !
Do Until Cells(2, colNo).Value = ""
colNo = colNo + 1
Loop
colNo = colNo - 1 'MOVE 1 COL TO LEFT TO LAST NON-BLANK CELL.
Range(startCell, lastCell).Select 'lastCell REFERS TO CELL B2!!
End Sub
以下代码段有效。您会注意到我必须重新定位对象变量的声明和赋值' lastCell'让代码工作。
Sub sbRangeUsingLoop_02()
' SELECTS RANGE B2:D2 AS IT IS MEANT TO.
Dim colNo As Integer
colNo = 2
Dim startCell As Range
Set startCell = Cells(2, 2) 'CELL B2
Do Until Cells(2, colNo).Value = ""
colNo = colNo + 1
Loop
colNo = colNo - 1 'MOVE 1 COL TO LEFT TO LAST NON-BLANK CELL D2.
Dim lastCell As Range
Set lastCell = Cells(2, colNo)
Range(startCell, lastCell).Select 'lastCell REFERS TO CELL D2
End Sub
我的问题是,当对象变量的声明和赋值放在代码的开头时,为什么Sub sbRangeUsingLoop_01()
不起作用 - 这是通常的做法?
为什么我必须在lastCell
的代码末尾放置Sub sbRangeUsingLoop_02()
声明和分配?
答案 0 :(得分:1)
您的第一种方法不起作用,因为在分配时,colNo
的值为2,因此您将始终获得单元格B2
。
要获得所需的行为,必须在计算colNo
时进行分配,即在循环之后。
声明可以在变量首次使用之前的任何位置(只要它在同一范围内定义)。但是,通常有必要尽可能接近第一次使用声明。