- ベストアンサー
VBA マクロ付きExcelファイルを無効で開く
タイトルの通り、マクロを含むExcelファイルを、マクロ無効でオープンしたいのですが、そういうことは出来るでしょうか? 新規ファイル作成.xlsというマクロがあって、temp.xlsというマクロを含んだファイルをnew.xlsというファイル名でコピーし、それをオープンしてデータを追加して終了。 次にそのnew.xlsをオープンした時にはtemp.xlsに含まれるマクロが実行される・・・ というようなことをしたいと思っています。 もしくは新規ファイル作成.xlsのマクロから、直接new.xlsのファイルにコーディングが可能であれば、それでも良いのですが・・・ データベースから表を作成し、作成後の変更データを再度データベースへ戻す、ということがやりたいのですが、上記の方法しか思いつきません。 もし上記の方法が出来ない場合は、別の方法がありますでしょうか? どなたかアドバイス、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1の方への補足から、B.xls の WorkBook_Open に UserFormを開くイベントがあり、マクロから B.xls を開いた場合は実行したくないって事だと判断しました。 意味が違ったら読み飛ばしてください。Excel97で確認してます。 A.xls と B.xls が同じフォルダ内にあるとして Sub Test() Dim motoB As String, copyB As String, wb As Workbook motoB = ThisWorkbook.Path & "\B.xls" copyB = ThisWorkbook.Path & "\New.xls" FileCopy motoB, copyB 'B.xlsをコピー Application.EnableEvents = False 'イベントを一時無効化 Set wb = Workbooks.Open(copyB) 'B.xlsのコピーを開く Application.EnableEvents = True 'イベントを有効に戻す 'ここから wb.Worksheets(1).Range("A1") = Now wb.Save wb.Close 'ここまではサンプルとして適当な処理 End Sub また、別の方法として B.xls の WorkBook_Open を止めて、標準モジュールに Sub Auto_Open() UserForm1.Show End Sub のようにすると A.xls 側で EnableEvents を使わなくても Auto_Open は実行されません。
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
すいません。何をされたいのか良く理解できないのですが。 とりあえず、new.xlsというファイルが開かれる時に マクロが実行されたりされなかったりを選択したいということであるなら どこかのセルに値を書いておけばよいんじゃないかなと。 Openイベントでその値を読み込み 0ならマクロ発動、1なら何もしない。 まぁこれでもマクロは実行はされていますがw
補足
分かりにくい説明で申し訳ありません! 一言で言えば「マクロを含む新規Excelファイルを作成する」マクロを作成したいということなんです。 A.xlsというマクロがあって、これはB.xlsというマクロを作るマクロです。 ですので結局、A.xlsでB.xlsを作成する時に、マクロを記述できる方法があれば、それでも構わないんですが、それも分からなくて・・・ それで最初からB.xlsのマクロを用意しておいて、A.xlsでは、そのマクロをコピーするだけにしようと思っていたのですが、B.xlsのマクロは有効で開くとフォームが出力されるようになっています。 現状では、A.xlsからB.xlsのデータを処理しようとファイルを開いてもマクロが有効になってフォームが出力されてしまうんです・・・それを解消する方法はないかと、マクロからマクロを無効で開く方法はないかと思いました。 こんな説明でお分かり頂けるでしょうか・・・ (なんだか書けば書くほど分かりにくくなってきたような気がします・・・すみません) また何かありましたら、よろしくお願いします。 ありがとうございました。
お礼
お礼が遅れて申し訳ありません! はい、papayukaさんが冒頭で言われている事をしたいと思っていました。 EnableEventsというプロパティ?は知りませんでした。 これが処理を止める方法なのですね。 助かりました、ありがとうございました。