- ベストアンサー
VBAでAccessから他の複数のExcelを操作するとき、マクロを無効にして開きたい
当社ではある報告のExcel雛型があり、各社員が雛型に入力したExcelそのものを社内メールに添付させて受け取っていますが、今回集約のためのAccessを作ってそのExcelの各セル番地を一覧で別のExcelに集約したいと考えています(一括して処理したいExcelの数は500件程度)。 Excel雛型には、各社員には余計な操作をさせたくないということで、メニューバー等々をVBAで非表示にしてあり、×ボタンも使用不可にしています(「保存して閉じる」ボタンを別に用意)。 ところが、以下のコードを雛型のExcelのThisWorkbookに入れているばっかりに、集約用のAccessからExcelを操作する際に、自分で仕込んだメッセージ(「×ボタン使用不可」)が表示されてしまい、最初のExcelをうまく閉じることができず、繰り返し複数のExcelを処理することができません。 *************************** Private Sub Workbook_BeforeClose(Cancel As Boolean) If CloseMode = False Then Cancel = True MsgBox "×ボタン使用不可" End If End Sub (※標準モジュールに Public CloseMode As Boolean を宣言して、別に用意した「保存して閉じる」ボタンをクリックしたときにCloseMode = Trueとしている。) *************************** そもそもExcelを開く際にマクロを無効にして開くことができれば閉じるときにこんなことにならずに済むと思うのですが。。。 Application.AutomationSecurity = msoAutomationSecurityForceDisable も試してみましたが、うまくいかないようです。 また、変数「CloseMode」に対して、集約用のAccessからExcelを開いたときに値を入れることができればいいとも思うのですが、スコープについて調べたところでは難しいかなと感じています。 (※Excel雛型のコードはさわれないので「参照設定」を変更するのもできないと思われます。) そんな小細工を施したExcelを何事もなく開いて中身のセル番地をコピーして閉じる方法をご存じでしたらご教授願います。 質問の内容もわかりにくくてすみません。。。 よろしくお願いいたします。<m(__)m>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Application.EnableEvents = False を試してください 参考URL http://sei.qee.jp/docs/program/vba/excel/noMacro/index.html
その他の回答 (1)
- cistronezk
- ベストアンサー率38% (120/309)
Appliction.EnableEvents = False 以外では、 Application.Run <「CloseMode」を書き換えているサブルーチン> として「CloseMode」を変更することかな。 http://officetanaka.net/excel/vba/tips/tips09.htm
お礼
早速の回答ありがとうございます。 Appliction.Runもまったく知りませんでしたので勉強になります。 参照設定とか難しいこと考えなくてもこれでいけるんですね! ありがとうございました。<m(__)m>
お礼
早速の回答ありがとうございました! お礼が遅くなってすみません。 試したところ、うまくいきました。 この1行でよかったんですね。。。 いろいろ調べてみたんですが、これにはたどりつきませんでした。 本当にありがとうございます。<m(__)m> 参考URLも参考にさせていただきます。