高校三年生の合唱祭で何を歌いましたか?

当社ではある報告の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>

A 回答 (2件)

Application.EnableEvents = False


を試してください

参考URL
http://sei.qee.jp/docs/program/vba/excel/noMacro …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました!
お礼が遅くなってすみません。

試したところ、うまくいきました。
この1行でよかったんですね。。。

いろいろ調べてみたんですが、これにはたどりつきませんでした。
本当にありがとうございます。<m(__)m>
参考URLも参考にさせていただきます。

お礼日時:2009/09/26 08:19

Appliction.EnableEvents = False


以外では、

Application.Run <「CloseMode」を書き換えているサブルーチン>

として「CloseMode」を変更することかな。
http://officetanaka.net/excel/vba/tips/tips09.htm
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
Appliction.Runもまったく知りませんでしたので勉強になります。
参照設定とか難しいこと考えなくてもこれでいけるんですね!
ありがとうございました。<m(__)m>

お礼日時:2009/09/26 08:24

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


おすすめ情報