正面からの、理由の回答でないのが残念ですが、
エクセル関数のINDIRECT関数のような処理(文字列指定なのだが、セル範囲を指定しての扱いで、取り込む処理)をRangeの引数に対し事前に行うのではないでしょうか。ワークシート関数の引数のような(下記例)書き方は通り、WorkSheets(”Sheet1")のように、VBA的な指定が通らないのは、何か内部処理のやり方に起因するのでは。VBAでフルパス指定文字列でも似たようなことだあると思いませんか。
ーー
小生がやってみると、質問の例に加え、下記の例がOKでした。
Sub test05()
x = "Sheet4!B5"
Range(x) = "AAvv"
End Sub
Sub test06()
x = "[Book1]Sheet3!B7"
Range(x) = "AApp"
End Sub
ーー
もう一つ、Shitキーを押しながら、エクセルのアイコンをクリックして
Book2を起動して(名前を付けて保存する前に)
Sub test07()
x = "[Book2]Sheet2!B2"
Range(x) = "AAFFF"
End Sub
もOKでした。
お礼
答ありがとうございます。 (回答者が同一であると気付かず、回答No.2のお礼が変になってしまいました。申し訳ありません) 紹介していただいたサイト、疑問にそのままずばりな内容でした。 >対象オブジェクトは省略するか Application を指定します。 ・オブジェクト修飾子(ピリオドの左側に記述するオブジェクト)を指定しない場合、エクセル全体(Excel.Application)が省略されている ・シートが指定されない場合、デフォルトシートが選択される。 ・オブジェクト修飾子であろうが範囲の名前であろうが、シートが指定された場合そのシートが選択される。 ・引数が一つの場合、Rangeプロパティには範囲の名前を現す文字列しか渡せない(Rangeオブジェクトは渡せない)。 と、理解してしまえば当たり前の事でした。 ですが、普段Applicationを使わないので、全く思い浮かびませんでした。 また一つエクセルに詳しくなる事ができました。どうもありがとうございます。 ただ、MicrosoftDocsのApplication. Range プロパティ (Excel)では >オブジェクト修飾子を指定せずにこのプロパティを使用すると、ActiveSheet.Range のショートカットとなります。 とあります。 もしかして、Microsoftの公式資料でも仕様通りではない……?