[[20200415152531]] 『右クリック メニュー追加のアドイン作成』(Vba初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『右クリック メニュー追加のアドイン作成』(Vba初心者)

右クリックにメニューを追加するアドインを作成し、アドイン登録中は全てのエクセルで使用できるようにしたいです。

右クリックにメニューを追加するコードは作成できたのですが、アドイン登録しても動作せず、手動で動作させるとエクセルを閉じるまでは使用できますが、開き直すと消えてしまいます。

アドイン登録中はどのエクセルファイルでも右クリックにメニュー追加した状態にする方法を教えていただけませんでしょうか?

サンプルコードです。メニューを2階層表示させて、2階層目にマクロをリンクして使いたいです。

 With CommandBars("cell").Controls.Add(Before:=1,Type:=msoControlPopup,)
      .Caption = "マクロ"
  With .Controls.Add
       .Caption = "A"
       .OnAction = "A"
End With
  With .Controls.Add
       .Caption = "B"
       .OnAction = "B"
End With
  With .Controls.Add
       .Caption = "C"
       .OnAction = "C"
End With
End With

End sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>アドイン登録しても動作せず
どの段階で実行されるというか、どのモジュールに書いてますか?

>手動で動作させるとエクセルを閉じるまでは使用できますが、開き直すと消えてしまいます。
とのことなので、【アドインブックが開かれたとき】に実行して、【アドインブックが閉じるとき】に右クリックメニューから消すマクロを実行じゃないですかね?

したがって、
アドインブックのThisWorkbookモジュールに

    Private Sub Workbook_Open()
        '右クリックメニューを追加するマクロ
    End Sub
    '==================================================
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        '追加した独自メニューを削除するマクロ
    End Sub

のようにしてないと仰るような動作にならないような・・・

(もこな2 ) 2020/04/15(水) 15:53


回答ありがとうございます。
元々標準モジュールにコードを入れていました、動作を試したときはそれを手動で動かしていました。

ThisWorkbookモジュールに以下コードを入れたところエラーが発生するようになりました。
「エラー 91 オブジェクト変数または With ブロック変数が設定されていません」

 With CommandBars("cell").Controls.Add(Before:=1, Type:=msoControlPopup)
この部分でエラーが発生しているようで、標準モジュールでは動作していたのですが、原因は何が考えられますでしょうか?

Private Sub Workbook_Open()

 With CommandBars("cell").Controls.Add(Before:=1, Type:=msoControlPopup)
      .Caption = "マクロ"
  With .Controls.Add
       .Caption = "A"
       .OnAction = "A"
End With
  With .Controls.Add
       .Caption = "B"
       .OnAction = "B"
End With
  With .Controls.Add
       .Caption = "C"
       .OnAction = "C"
End With
End With

End Sub

(Vba初心者) 2020/04/15(水) 16:58


 CommandBarsプロパティの親を指定してください。
 CommandBarsオブジェクトの親は、ApplicationオブジェクトとWorkBookオブジェクトがありえます。

 ThisWorkbookモジュールでは、親オブジェクトに何も書かないと
 WorkBookオブジェクトであるThisWorkbookがデフォルトで親と仮定されます。

https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.commandbars

 には、以下の記載があり、
 >ブックが別のアプリケーションに埋め込まれ、ブックをダブルクリックしてユーザーが
 >アクティブ化した場合、このプロパティを**workbook** オブジェクトに対して使用する
 >と、他のアプリケーションで使用可能な excel のコマンドバーのセットが返されます。
 >それ以外の場合、Workbook オブジェクトにこのプロパティを使用すると Nothing を返します。
 
 ThisWorkBook.CommandBarsはNothingになります。

 インデントは 意味を考えてつけましょう

    Private Sub Workbook_Open()

       With Application.CommandBars("cell").Controls.Add(Before:=1, Type:=msoControlPopup)
         .Caption = "マクロ"
          With .Controls.Add
               .Caption = "A"
               .OnAction = "A"
          End With
          With .Controls.Add
               .Caption = "B"
               .OnAction = "B"
          End With
          With .Controls.Add
               .Caption = "C"
               .OnAction = "C"
          End With
       End With

    End Sub
(´・ω・`) 2020/04/15(水) 22:10

ご教授ありがとうございます。
いただきましたコードで想定した動きになりました。

助かりました。
(Vba初心者) 2020/04/16(木) 11:33


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.