在VBA编码中放置变量的位置

时间:2016-06-25 06:26:49

标签: excel vba excel-vba ms-office excel-2007

在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()声明和分配?

1 个答案:

答案 0 :(得分:1)

您的第一种方法不起作用,因为在分配时,colNo的值为2,因此您将始终获得单元格B2

要获得所需的行为,必须在计算colNo时进行分配,即在循环之后

声明可以在变量首次使用之前的任何位置(只要它在同一范围内定义)。但是,通常有必要尽可能接近第一次使用声明。