- ベストアンサー
VBAの質問です
Wordのファイルの保存、上書き保存、終了 メニュー押下のイベントを取得して、ある処理を したいのですが、どのようにイベントを取得 するれば良いのか困っております。 勉強不足で恐縮ですが、どなたか宜しく御願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 以下は、Wordのヘルプを基に、書き直したものです。 分かりにくければ、補足してください。 (1)オブジェクト変数を宣言する VBEの「挿入-クラスモジュール」で、 新しいクラスモジュールを作成します。 この新しいクラス モジュールに、次のコードを記述します。 Public WithEvents App As Word.Application (2)イベントプロシージャを記述する たとえば、こんな感じです。 Private Sub App_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean) '文書を閉じるイベント MsgBox "文書を閉じようとしています。", vbInformation End Sub Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) '保存するイベント MsgBox "文書を保存しようとしています。", vbInformation End Sub (3)宣言したオブジェクトを初期化する プロシージャを実行する前に、 クラス モジュールに宣言したオブジェクト (この例では App ) と Application オブジェクトを接続する必要があります。 次のコードを実行すると、接続できます。 適当な標準モジュールに、貼り付けて実行してください。 ただし、(1)で挿入したクラスモジュールの名前が、 「Class1」である前提で書いてあります。 異なる名前でクラスモジュールを挿入した場合は、 Dim X As New Class1 の部分を、適当な名前に変更してください。 Dim X As New Class1 Sub Register_Event_Handler() Set X.App = Word.Application End Sub (4)[Register_Event_Handler] プロシージャを実行します。 プロシージャの実行後、イベントが発生すると、 クラス モジュール内のイベント プロシージャが実行されます。 この例では、文書を保存したり、文書を閉じる直前にイベントが発生し、メッセージを表示します。
その他の回答 (2)
メニュー押下のイベントを取得する方法はわかりませんでしたので,その代替案を考えてみました. 例えば,話を簡単にするために,上書き保存の前に必ず「さあ,保存しまっせー」と表示させる事を考えてみます. マクロの記録で,上書き保存はVBAでどんなコードになるか確認します.マクロの保存先は,Normal.dotにしておくと,Wordでいつもつかえるマクロとして記録できます.今回も当然そのようにします. 上書き保存は, ActiveDocument.Save で書けることが分ります.この直前に MsgBox "さあ,保存しまっせー" を追加して,その他の余分に記録されているコードを削除すると,以下のマクロが完成します. Sub Macro1() ' ' Macro1 Macro ' 記録日 2003/07/08 記録者 XXXXXX MsgBox "さあ,保存しまっせー" ActiveDocument.Save End Sub これをメニューから実行できるように,Wordのメニューのカスタマイズします. (1)ツール-ユーザ設定でコマンドを選ぶ. (2)分類の欄から「マクロ」を選び,右のコマンドの欄に先ほど記録したMacro1があることを確認します. (3)(本物の左上の)「ファイル」メニューを選びます. (4)ダイアログボックスの中のMacro1を,上書き保存の下あたりにドラッグするとMacro1がメニューから実行できるようになります. (5)挿入されたMacro1を右クリックすると,メニューの名前を変更できるので,「上書き保存(&S)」とつけちゃいます.(本物の上書き保存は事前に削除しておくと良い.組み込みメニューなので後から復活できるはずです) ということで,見た目には「上書き保存」を実行しているが,実際には自作マクロを実行して,そのマクロ中ではしっかりと上書き保存する処理を書くというのはどうでしょう.
お礼
御回答有難うございました。 勉強になりました。
- happypoint
- ベストアンサー率36% (521/1422)
こんにちは。 「Application オブジェクトでイベントを使用する」 でWord VBAのヘルプを検索してみてください。
お礼
御回答有難うございました。 目標としていた事が出来そうです。