###質問内容
以下のExcel VBAコードは実行時に選択しているシートによって動作が異なります。
動作が異なる理由をご教示ください。
実現したいこと
インプットボックスにてセルを選択し、選択したセルの値をコレクションへ追加し、
イミディエイトウィンドウにfor文で順番に表示していきます。
前提
Excelに一枚のシート(Sheet1)を用意します。
適当にB3:B7セルを結合し、「テスト1」と入力します。
次にB8:B15セルを結合し、「テスト2」と入力します。
Sheet1のタブを右クリックし「移動またはコピー」から末尾にSheet1のコピーである
Sheet1(2)を作成します。
Sheet1(2)のB3:B7セルには「テスト3」を入力、B8:B15セルには「テスト4」と入力します。
発生している問題・エラーメッセージ
・正常動作
Sheet1(2)を選択したまま、以下のコードを実行し、インプットボックスで以下の順にセルを
指定していきます。
Sheet1のB3:B7→「OK」→Sheet1のB8:B15→「OK」→Sheet1(2)のB3:B7→「OK」→Sheet1(2)のB8:B15→「キャンセル」
するとイミディエイトウィンドウには 以下が出力されます。
これが想定動作となります。
テスト1
テスト2
テスト3
テスト4
・質問点である異常動作
Sheet1を選択したまま、以下のコードを実行し、インプットボックスで以下の順にセルを
指定していきます。
Sheet1のB3:B7→「OK」→Sheet1のB8:B15→「OK」→Sheet1(2)のB3:B7→「OK」→Sheet1(2)のB8:B15→「キャンセル」
するとイミディエイトウィンドウには 以下が出力されます。
テスト1
テスト2
何故「テスト3」「テスト4」が正常動作のように出力されないのでしょうか。
エラーメッセージ
該当のソースコード
VBA
1Sub テスト() 2 ' ユーザー入力でセルを選択し、選択したセルをコレクションに加え、 3 ' キャンセルが押された場合、コレクションの値を順番に貼付けを行う。 4 5 Dim myCollection As New Collection 6 Dim selectedRange As Range 7 Dim count As Integer 8 Dim i As Integer 9 10 11 ' ユーザーがセルを選択し、キャンセルが押されるまで繰り返す 12 Do 13 On Error Resume Next 14 Set selectedRange = Application.InputBox("セルを選択してください", Type:=8) 15 On Error GoTo 0 16 17 ' キャンセルが押された場合はループを抜ける 18 If selectedRange Is Nothing Then 19 Exit Do 20 End If 21 22 ' 選択されたセルをコレクションに追加 23 myCollection.Add selectedRange 24' myCollection2.Add selectedRange 25 26 Set selectedRange = Nothing 27 28 Loop 29 30 '作業シートB列の入力 31 count = myCollection.count 32 33 For i = 1 To count 34 Debug.Print myCollection(i) 35 Next i 36 37 38 39End Sub 40

0 コメント