0

驚いたことに、コードのある時点で範囲を設定できないことに気付きました。そして、この問題についての言及はどこにも見つかりませんでした。

そこで、Range 変数を (dim で) 宣言しました。

そして、 Set Myvar = Worksheets("blabla").Range("A1:C3") を実行します

そして、Excelは範囲外のエラーコード9をスローします...

コードの先頭に同じ行を配置すると、機能します (他のセットがある場所)。

それはVBAの既知の仕様ですか、それとも何か問題がありますか?

編集:

どうやら、問題は「設定」されていなかったようですが、ワークブックがアクティブになっている場合にのみ範囲を選択できるという事実です。

私のコード: Transform_file.Worksheets("general balance").Range(Cells(startline, 1), Cells(LastCellNumber, 1)).Value = "cool"

前に Transform_file.activate がある場合にのみ機能します

したがって、私の質問の問題は Set ではなく、明らかにどこでも使用できます。

4

1 に答える 1

2

問題は、VBA がいくつかの一般的なデフォルトと仮定をどのように使用しているかを認識していないことだと思います。使用する場合:

 Worksheets("blabla") 

Excel は、次のことを意味していると想定しています。

 ActiveWorkbook.Worksheets("blabla") 

私は実際、それはさらに多くを想定しています:

 Application.ActiveWorkbook.Worksheets("blabla")

この種の問題を回避する最善の方法は、ブックを開くときにブック オブジェクトを作成して、コード内で明示することです。そのようです:

Dim wkb As Workbook
Set wkb = Workbooks.Open("blah.xls")
wkb.Worksheets("blabla")

または、コードがコードと同じワークブックにあるワークシートを参照している場合は、次を使用できます。

ThisWorkbook.Worksheets("blabla")

これらの仮定は、言語に SET コマンドがある理由であるオブジェクトのプロパティにも当てはまります。たとえば、次のようにコーディングします。

Range("A1")

Excelが実際に返すものは次のとおりです。

Range("A1").Value

これは、Value が Range オブジェクトの既定のプロパティであるためです。この言語は、コーディングを節約するために、このように構築されています。ほとんどの場合、範囲の値を使用します。問題は、オブジェクトを変数に割り当てたい場合であり、SET を使用する必要がある場合のデフォルト プロパティではありません。SET は、オブジェクト全体を返すと言っているだけです。

于 2013-06-25T09:12:24.650 に答える