- ベストアンサー
Application.Run実行時にエラー
- Excelファイルのマクロ実行時にエラーが発生しました。
- 別ファイルのマクロを実行するために作成したマクロが正常に動作しない問題が発生しています。
- 実行時エラー’1004’が表示され、マクロが使用できない可能性があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 直接必要なことはお答えしたつもりでしたが、 今になって十分ではないかも、という気がしたので、追加補足します。 > 何が原因でしょうか? これについては、マクロの呼び出し方に問題があって、 ブックへのパスをシングルクオートで括ることで問題が解消される ということは、#2に記した通りです。 > なお、Macro2は単独で実行した場合は正しく動作しています。 この部分に補足が必要と思ったのですが、 #2の、 >> ただ、開いていないワークブックのマクロを呼び出す、というのは、 >> そのワークブックを開くことにもなりますから、 ここをもう少し説明しておくべきでした。 開いていないワークブックのマクロを呼び出す と、Excelは自動的に そのワークブックを開く のですが、 「test.xlsm」がアクティブになる訳ではありません。 なので、'Macro2'の内容として、 Excelのオブジェクト(Workbook、Worksheet、Range、Cell、、、等)について、 ActiveWorkbook、Activesheet、修飾の無いRangeやCell、Selection のような記述を使っている場合は、 'Macro2'を正しく呼び出せたとしても、期待した結果が得られるかどうかは、 オブジェクトを適切に捉える記述になっているかどうかに依存しますので注意が必要です。 「test.xlsm」がアクティブな時には「Macro2は単独で実行した場合は正しく動作」 していたのだとしても、 他のワークブックがアクティブな時にも正しく動作するように 正しく適切に書いて置かないと期待外れになってしまう場合もあるということです。 ActiveWorkbook、Activesheet、修飾の無いRangeやCell、Selection などはすべて書換える必要があるかどうかすべてチェックした方がいいです。 「どのブック(の)?」 「どのシート(の)?」 という風に、例えば、 Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1").Value = "hoge" とか、 ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "hoge" とか、 親オブジェクトをしっかり意識して絶対的な参照をするように、 記述を統一しておかなければ、期待通りに機能しないことがあります。 もしも、こういう問題で躓いているようでしたらば、 'Macro2'の具体的な記述と、 Workbook、Worksheet、Range、Cell、、、等が 「どのブック(の)?」 「どのシート(の)?」 どのオブジェクトを意図したものか判るような添え書きがあれば こちらで対策を考えますので、補足欄にでも書いてみて下さい。 個人用マクロブック(PERSONAL.XLSB)やアドイン(*xlam)ブック ではなくて、 開いていないワークブックのマクロを呼び出す という難しい方法についても、 それが目的に適う必要な方法なのか、 十分の検討した上で全体の設計を決めるようにしてください。 追加補足、以上です。
その他の回答 (2)
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 直接の回答として、 Application.Run "'C:¥Users¥****¥Desktop¥test.xlsm'!Macro2" とか、こういう場合はモジュールも明示的に指定して Application.Run "'C:¥Users¥****¥Desktop¥test.xlsm'!Module1.Macro2" とか。 ブックへのパスをシングルクオートで括りましょう。 ただ、開いていないワークブックのマクロを呼び出す、というのは、 そのワークブックを開くことにもなりますから、 そういう特殊な狙いがあるという場合以外では、 普通は、個人用マクロブック(PERSONAL.XLSB)に登録しておくとか、 まだしも、アドイン(*xlam)ブックとして保存したものを参照設定するとか、 の使い方をするものかな、とは思います。 私の方で意図が汲み取れていないようでしたら、すみません。
ユーザーです。 Application.Run "C:¥Users¥****¥excel.exe" なら理解できます。 マクロの場合、こちらに記述して、呼び出すか、test.vbs とし、行頭に手順を書けば呼び出せますが、外部マクロは呼び出したことがありません。 内部に Macro2 を記述、ボタン(きっかけ)で呼び出すか、Macro2() で内部記述を呼び出します。 私の場合。
お礼
回答ありがとうございました。
お礼
お礼が遅くなり申し訳ありません。 解決できました。 ありがとうございました。