在VBA编码中放置variables的地方

在VBA编码中放置variables的地方?

要select范围,我通常使用其他编码。
但是,我尝试了下面的代码,并且让我向你查询这个。

下面是两个代码块,一个不工作 – ( 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 

以下代码片段起作用。 你会注意到我不得不重新定位对象variables'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()不工作时,对象variables的声明和分配放置在代码的开始 – 这是通常的做法吗?

为什么我必须将lastCell声明和assing放在Sub sbRangeUsingLoop_02()的代码末尾?

你第一种方法不起作用,因为在赋值的时候, colNo的值是2,所以你总是会得到单元格B2

为了获得所需的行为,必须在计算出colNo (即循环之后)时进行分配。

声明可以在第一次使用该variables之前的任何地方(只要它在相同的范围内定义)。 但是,尽可能使声明接近第一次使用通常是有帮助的。