- ベストアンサー
シート単体の時のみマクロを有効に
- メニュー画面となる「menu.xls」ファイルと、コードごとの管理の為の「コード.xls」ファイルがあります。
- 「menu.xls」はシート「メニュー」・「リスト」・「フォーマット」の構成で、この「フォーマット」シートにコードの名前をつけて保存したものが、「コード.xls」となっています。
- 現在、「コード.xls」としてシート「フォーマット」を開いた時はマクロがWorkbook_Openで動作してくれて構わないのですが、「menu.xls」として開いた時もシート「フォーマット」のWorkbook_Openが動作してしまい、エラーが出てきてしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Workbook_Openの先頭でブック名を判定して、menu.xlsなら実行しないようにすればいいのでは。 If ThisWorkbook.Name = "menu.xls" Then Exit Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
アイデア次第でどうとでも出来そうに見えます。 例:「メニューブック」なら実行しない private sub Workbook_Open() if thisworkbook.name = "menu.xls" then exit sub ’do original task end sub 例:シート数を見て実行しない private sub Workbook_Open() if thisworkbook.worksheets.count > 1 then exit sub ’do original task end sub 例:ブック名を検証して実行しない.たとえばA1セルに「コード」が記入されている private sub workbook_Open() if thisworkbook.name <> thisworkbook.worksheets(1).range("A1").value & ".xls" then exit sub ’do original task end sub #補足 何を「実行させない」ようにしたいのかも説明不足です。 ・他にあるマクロも,直接実行指示しても実行不可にしたいなら 個々のマクロに上述同様の仕込みをしておくことも出来ます workbook_Openで「フラグ」をどこかに用意して,個々のマクロにチェックさせてもいいです ・なにかイベントプロシジャを阻止したいなら application.enableevents = false をworkbook_openで宣言してしまっても良いかもしれません。 もちろん個々のイベントプロシジャの中で,前述と同じくしてもいいです。
お礼
keithinさんは以前にもご回答してくださいましたね、度々本当にありがとうございます。 今回はWookbook_Openを使うこと自体が間違っていたようです。 Wooksheet_Activateを使ったら上手くいきました。 >>何を「実行させない」ようにしたいのかも説明不足です。 今回は、「menu.xls」の「メニュー」シート・「リスト」シート・「フォーマット」シートのうち「フォーマット」シートのみマクロを無効化したい。 けど「コード.xls」の「フォーマット」シートのみで開くときは実行させたい。 という質問をさせて頂きました。申し訳御座いません。 例もたくさん挙げて頂き、本当にありがとうございます。 「シート数を見て」や「ブック名を検証して」などの条件文は、他にも使えそうです。 是非参考にさせて頂きたいと思います。 何度もご教授頂き、本当にありがとうございます。
お礼
解決致しました。 Workbook_OpenではなくWorksheet_Activateとして「フォーマット」シートに記述し、 教えて頂いた If ThisWorkbook.Name = "menu.xls" Then Exit Sub End If を入れて判定させました。 これで無事動作致しました。ありがとうございます。 ベストアンサーは、悩んだのですが早くに回答を下さったnag0720さんにします。 ありがとうございました。
補足
ご回答ありがとうございます。 無事に、menu.xlsとして開いたときはマクロが自動実行されなくなりました。 ですが、今知ったことなのですが、Wookbook_OpenはThis Workbookのプロジェクト?に記述しないと動作しないということなのでしょうか。 「コード.xls」で開いた時動作しませんでした。 「menu.xls」内のマクロで、「フォーマット」シートをコピーして「コードの名前をつけて保存」としています。 この時「フォーマット」シートのVBAは「コード.xls」でもコピーされているんですが、 「menu.xls」のThis Workbookのwookbook_openはコピーされず、「コード.xls」でwookbook_openで動作してほしいマクロが動いてくれません。 どうしたらいいのでしょうか、全くわかりません。