2016-06-25 5 views
1

VBAコーディングで変数を配置する場所はどこですか?VBAコーディングで変数を配置する場所

範囲を選択するには、一般に他のコードを使用します。
しかし、私は次のコードを試してみました。

は、以下の2つのコードのブロック、ワーク・ないもの(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()が動作しないのですか?

の宣言とアサインメントをSub sbRangeUsingLoop_02()のコードの最後に配置する必要があるのはなぜですか?

+0

質問を慎重に書式設定すると、良い回答が得られるようになります。 –

+0

私はあなたの上記のコメントを取って、StackExchangeを初めて使っています。どうすれば慎重に質問をフォーマットすることができますか? – ComfortablyNumb

答えて

1

割り当て時にcolNoに値2が設定されているため、常に最初の方法は機能しません。したがって、常にB2というセルが表示されます。

colNoが計算されたとき、つまりループの後に割り当てが行われる必要があります。ループ。

宣言は、(同じスコープで定義されている限り)変数が初めて使用される前のどこにでも置くことができます。しかし、通常は宣言をできるだけ最初の使用に近いものにするのに役立ちます。

関連する問題