プロが教える店舗&オフィスのセキュリティ対策術

Book1の下記マクロからBook2を開きmacro2を実行させようとしても、Application.Run の行で実行時エラー '1004'(マクロ ''D:\test\Book2.xlsm'!macro2'を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。)
とのエラーメッセージが出てしまいます(この時、Book2は立ち上がります)。

Sub auto_open()
MsgBox "自動実行開始!(Book1)"
Application.Run "'D:\test\Book2.xlsm'!macro2"
End Sub

 この1004エラーについては多くのサイトが対応策を提示しているので、これらを参考に、記述の誤り、トラストセンターでの設定等、いろいろ試したもののエラーは全く解消されませんでした。
 因みにBook2のmacro2は以下の通りで、これ単独では正常に動作します。
Sub auto_open()
MsgBox "自動実行成功!(Book2)"
End Sub

 以上、解決策を教えて頂ければ幸いです。
 宜しくお願いします。

A 回答 (4件)

こんばんは


Book2の Sub auto_open() プロシージャ 
どのモジュールに書いていますか? 
標準モジュールでないと読めないと思いますよ

macro2と言うプロシージャ名のコードは示されていないので
#1お礼にある
Application.Run "'D:\test\Book2.xlsm'!auto_open" で
Book2.xlsmが開くなら、よいハズです。

一応、確認やスペルチェックなどを再点検として少し書き替えて
更にauto_openと言う名前が間違えやすいので(auto_openは色々な事がしたいと思うので)下記のような一例を試してください。
コードは全てコピペでどうぞ

Book2の、標準モジュール(オブジェクト名Module1)の場合

Sub auto_open()
Call macro2
End Sub

Sub macro2()
MsgBox "自動実行成功!(Book2)"
End Sub


Book1の標準モジュールに

Sub auto_open()
MsgBox "自動実行開始!(Book1)"
Application.Run "'D:\test\Book2.xlsm'!Module1.macro2"
End Sub
    • good
    • 0
この回答へのお礼

Qchan1962さん、的確な回答を有り難うございました。
 Qchan1962さんのコードをそのままお借りして試したところ、完璧でした。
 解決には大分時間がかかるかも知れないと思っていたので、大いに助かりました。
 Qchan1962さんには以前にもお世話になった事があったと記憶しております。今後とも、どうぞ宜しくお願い致します。

お礼日時:2021/09/22 09:20

No2です



情報が「できない」以外にほとんどないので、何ともわかりかねます。

私の環境では、
 Application.Run "'" & "ブックのパス" & "'!" & "マクロ名"
で問題なく動作します。
モジュール名を付す場合は、"モジュール名.マクロ名"にすればよいです。

想像するところ、質問者様が通常とは違うことを行っている部分に原因があるのではないかと推測しますが、それがどこなのかは情報がまったく無いのでわかりません。
    • good
    • 0
この回答へのお礼

>想像するところ、質問者様が通常とは違うことを行っている部分に原因があるのではないかと推測しますが、それがどこなのかは情報がまったく無いのでわかりません。

 "モジュール名.マクロ名"の件、有り難うございました。
 ところで、auto_openのコードを弄るのは今回が初めてなので極めて単純なコードしか書いていません。
 Book1のマクロは既出の通りですが、Book2のマクロは以下の通りです。

Sub auto_open()
MsgBox "自動実行成功!(Book2)"
End Sub

 これだけ単純なので特に通常と違うことを行っているとも思えないのですが。
 数十のサイトで調べたのですが解らず、質問をアップした次第です。
 もう少し、調べるなり検討してみたいと思います。
 有り難うございました。

お礼日時:2021/09/21 17:25

No1です



>御指摘のマクロ名は以前、auto_open で試したのですが結果は同じでした。
>Application.Run "'D:\test\Book2.xlsm'!auto_open"
auto_openのマクロを実行したいのなら、ブックを開けば良いです。

モジュール内のマクロを実行する際に同名が存在する場合は、モジュール名も付して呼び出す必要があります。
    • good
    • 0
この回答へのお礼

>auto_openのマクロを実行したいのなら、ブックを開けば良いです。

 御指摘のブックとはBook2の事でしょうか?
 最初の質問にも書いたように、Book1のマクロを実行した時点でBook2そのものは立ち上がっています。
 又、このマクロ作成の目的はBook1からBook2をmacro2で動作させることなので、手動(だとしたら)でブックを開くのは意味がありません。

>モジュール内のマクロを実行する際に同名が存在する場合は、モジュール名も付して呼び出す必要があります。

 これについては同一モジュール内に同名のマクロは存在しませんが、宜しければ、その際の書式を教えて下さい。
 なお、最初の回答で「macro2はちゃんと存在していて、実行できる形式になっていますか? 」については見落としていて失礼しました。
 これについても最初の質問に書いたように、Book2単独の動作ではmacro2は正常に機能します。
 何度もお手数をお掛けして申し訳ありませんが宜しくお願いします。

お礼日時:2021/09/21 15:04

こんにちは



>因みにBook2のmacro2は以下の通りで、~~

ご提示のマクロは
>Sub auto_open()
であって、macro2ではありません。

macro2はちゃんと存在していて、実行できる形式になっていますか?
    • good
    • 1
この回答へのお礼

fujillinさん、早速の回答、有り難うございました。
 御指摘のマクロ名は以前、auto_open で試したのですが結果は同じでした。
Application.Run "'D:\test\Book2.xlsm'!auto_open"
 又、お気づきの点があれば改めて宜しくお願いします。

お礼日時:2021/09/21 13:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A