« 右クリックメニューへのマクロ登録方法 | トップページ | 翻訳にパソコンを使うヒント »

2009年7月24日 (金)

右クリックメニューへのマクロ登録方法(修正・追記)

昨日、右クリックメニューへのマクロ登録方法の記事を書いたのですが、さっそく修正です。はっきりと理解せずにコードを掲載してしまい、大変失礼しました。

また、表中のテキストを選択した場合の右クリックメニューの登録のコードを追記しました。(250行から470行)

(前回のコードの一部)

Sub AutoExec()

10    With Application.CommandBars("text")
20        .Reset

・・・

とあったのですが、20行の.Resetがあると、以下のような不都合がおこることがわかりました。

①今までにショートカットに自ら登録したメニューがすべてリセットされてしまいます。

②ワード起動時に他のマクロから登録したメニューも消去されてしまします。

よって、.Resetを使わずに、起動するたびに右クリックにメニューを登録する方法を以下のようにしてみました。

ちなみに、.Resetをしないと、ワードを起動するたびに、メニューを追加し続けるので、同じメニューが何個も繰り返し表示されてしまいます。

●プログラムの考え方

①ワード起動時(テンプレート起動時)に4つのメニューの記載があれば、それらを削除したあとに、新たに4つのメニューを書く。

②ワード終了時(テンプレート終了時)に4つのメニューを消す。

このようにすると、ワードの起動・終了だけではなくて、テンプレートのアドインのオン・オフのときにもメニューを書いたり消したりできます。

●各プログラムの説明

上記①の作業は、AutoExecで行います。

30行か60行にかけて、メニューの削除を行っています。

メニューが書かれていないのに削除を使用とする場合には、エラー(エラーコード5)になるのでその場合には、無視して次に進む(resume next)としました。

念のため、わざわざ一度メニューを消してから書きなおす処理としました。重複記載を避けるためです。

大辞典 Excel VBA」の例文を見ると、ツールバーの登録時には、同じ名称のツールバーを削除してから(重複しないようにしてから)登録しています。

これをまねしてみました。

なお、250行でWith Application.CommandBars("table text")としてみましたが、この"table text"は、ユーザー設定画面でショートカットメニューを登録する場合の「テーブル」の「表の文字列」に対応します。

適当に言葉をいれて探していたらうまくはまりました。偶然見つけました。

②の作業は、ワード終了時なので、AutoExitを用います。

ワードが起動されるときと同じようなコードです。

ワードが終了(テンプレート終了)時にメニューを消すように命令文が作られています。

●プログラム

Sub AutoExec()

10       On Error GoTo AutoExec_Error

20    With Application.CommandBars("text")
         
30        .Controls("Google詳細検索...").Delete
40        .Controls("グーグル検索").Delete
50        .Controls("グーグル検索_フレーズ").Delete
60        .Controls("グーグル検索_ワイルドカード").Delete
         
70        With .Controls.Add(Type:=msoControlButton, Before:=4)
80            .Caption = "Google詳細検索..."
90            .OnAction = "vct_Google_詳細検索"
100       End With
         
110       With .Controls.Add(Type:=msoControlButton, Before:=5)
120           .Caption = "グーグル検索"
130           .OnAction = "vct_グーグル検索"
140       End With
         
150       With .Controls.Add(Type:=msoControlButton, Before:=6)
160           .Caption = "グーグル検索_フレーズ"
170           .OnAction = "vct_グーグル検索_フレーズ"
180       End With
         
190       With .Controls.Add(Type:=msoControlButton, Before:=7)
200           .Caption = "グーグル検索_ワイルドカード"
210           .OnAction = "vct_グーグル検索_ワイルドカード"
220       End With
         
          '区切り線を引く
230       .Controls("Google詳細検索...").BeginGroup = True

240   End With

250   With Application.CommandBars("table text")
         
260       .Controls("Google詳細検索...").Delete
270       .Controls("グーグル検索").Delete
280       .Controls("グーグル検索_フレーズ").Delete
290       .Controls("グーグル検索_ワイルドカード").Delete
         
300       With .Controls.Add(Type:=msoControlButton, Before:=4)
310           .Caption = "Google詳細検索..."
320           .OnAction = "vct_Google_詳細検索"
330       End With
         
340       With .Controls.Add(Type:=msoControlButton, Before:=5)
350           .Caption = "グーグル検索"
360           .OnAction = "vct_グーグル検索"
370       End With
         
380       With .Controls.Add(Type:=msoControlButton, Before:=6)
390           .Caption = "グーグル検索_フレーズ"
400           .OnAction = "vct_グーグル検索_フレーズ"
410       End With
         
420       With .Controls.Add(Type:=msoControlButton, Before:=7)
430           .Caption = "グーグル検索_ワイルドカード"
440           .OnAction = "vct_グーグル検索_ワイルドカード"
450       End With
         
          '区切り線を引く
460       .Controls("Google詳細検索...").BeginGroup = True

470   End With

480      On Error GoTo 0
490      Exit Sub

AutoExec_Error:

500       If Err = 5 Then
510           Resume Next
520       Else
530           MsgBox "google_searchにエラーが発生したので終了します。"
540       End If
         
End Sub

Sub AutoExit()

10       On Error GoTo AutoExit_Error

20    With Application.CommandBars("text")
         
30        .Controls("Google詳細検索...").Delete
40        .Controls("グーグル検索").Delete
50        .Controls("グーグル検索_フレーズ").Delete
60        .Controls("グーグル検索_ワイルドカード").Delete

70    End With

80    With Application.CommandBars("table text")
         
90        .Controls("Google詳細検索...").Delete
100       .Controls("グーグル検索").Delete
110       .Controls("グーグル検索_フレーズ").Delete
120       .Controls("グーグル検索_ワイルドカード").Delete
         
130   End With

140      On Error GoTo 0
150      Exit Sub

AutoExit_Error:

160       If Err = 5 Then
170           Resume Next
180       Else
190           MsgBox "google_searchにエラーが発生したので終了します。"
200       End If

End Sub

|

« 右クリックメニューへのマクロ登録方法 | トップページ | 翻訳にパソコンを使うヒント »

マクロプログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/45724193

この記事へのトラックバック一覧です: 右クリックメニューへのマクロ登録方法(修正・追記):

« 右クリックメニューへのマクロ登録方法 | トップページ | 翻訳にパソコンを使うヒント »