|
▼初心者 さん:
こんばんは。
>NewBookが複数且つ事前にOPENする必要ありなので、
>ブック名を特定する必要があったのです。
>
>自分なりにも色々試してしましたが、
>現在、以下の方法で動くことを確認しています。
>(Officeのバージョンは '97を使用しています。)
>
> Dim strPosition as String
> strPosition = Application.ConvertFormula(引数記述略)
> ←R1C1形式をA1形式に変換
> Workbooks("A.xls").Worksheets("Sample").Range("A1").Copy _
> Workbooks(NewBook).Worksheets(1).Range(strPosition)
>
>理由はわかりませんが、Rangeの部分の記述において
> Range(A1形式) -> OK
> Range(Cells(Row,Col)) -> NG
'↑こういう指定は、そもそもできませんが・・・
range(Cells(Row,Col).address) 'ならわかりますが・・・
>となりました。
例えば、ブックA.xlsのシートSampleのセルa1を
Workbooks(NewBook).Worksheets(1)で取得できるシートのセルA1〜A10に
コピーすることを考えます。
この場合、
Workbooks("A.xls").Worksheets("Sample").Range("A1").Copy _
Workbooks(NewBook).Worksheets(1).Range(cells(1,1),cells(10,1))
とすると、同様のエラーが発生します。
Cellsは、プロパティですから、その前にはオブジェクトが必要です。
省略すると、アクティブシートのプロパティと見なされますが、
アクティブなシートがブックA.xlsのシートSampleだったら、記述に矛盾が出てきてしまいます(Workbooks(NewBook).Worksheets(1)に貼り付けるのに、
Worksheets("Sample")のプロパティでは矛盾でしょ?)。
上記の記述でも変数Newbookで示されるブックの左端シートがアクティブになっていれば、正常に実行されるはずです。
with Workbooks(NewBook).Worksheets(1)
Workbooks("A.xls").Worksheets("Sample").Range("A1").Copy _
.Range(.cells(1,1),.cells(10,1))
end with
どちらのブックがアクティブになっていてもエラーにならないはずです。
元々の採用されているコードとどちらが良いかは、又別の問題ですが・・・。
ご質問の回答になったでしょうか?
|
|