3

sheet1 以外の別のシートまたはワークブックが選択されている場合、マクロを実行するとコードが機能しないのはなぜですか? 後でセル エントリの値を変数に変更できるように、この形式のコードが必要です。これを回避する方法はありますか?

Sub testhsa()
    ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(2, 2)).Value = 1
End Sub
4

2 に答える 2

6

Cellsステートメントのコンポーネントを修飾していないため、機能しません。

以下が必要です - の.前に注意してCellsください:

With ThisWorkbook.Sheets("Sheet1")
    .Range(.Cells(1,1), .Cells(2, 2)).Value = 1
End With

編集:コメントのさらなる明確化。.ワークシート/範囲/セルをオフのままにすることで、アクティブな親が必要であることを Excel に伝えます。すなわちCells(1, 1)、同じActiveSheet.Cells(1,1)Range("A1:D4")あり、と同じActiveSheet.Range("A1:D4")です。

このWithステートメントは、それに続くものはすべてそのオブジェクトに関連付けられていることを効果的に Excel に伝えるため、私の 3 行のコードは次のようになります。

ThisWorkbook.Sheets("Sheet1").Range(ThisWorkbook.Sheets("Sheet1").Cells(1,1), ThisWorkbook.Sheets("Sheet1").Cells(2, 2)).Value = 1

ActiveWorkbookこれにより、コードが実行されているワークブックの範囲にアクセスするコードが何であれ、Excel に明確になります。

最後に、範囲を頻繁に使用している場合は、HeadofCatering が正しく示唆しているように、それらを変数に割り当てたいと思うでしょう。

于 2013-07-18T01:22:16.150 に答える