• 締切済み

Excel VBAでツールバーにマクロを登録したい

自作のツールバーをブックに添付し、 スタートアップにマクロを書いたブックを保存し(起動して非表示にしてあります)、 そのマクロをツールバーの各ボタンに登録しようとしています。 下記のようなコードを書いたのですが、ツールバーに作成したボタンにはマクロが登録できるのですが、 サブメニュー内のボタンには登録できません。 Dim MyWB, NBar MyWB = "stampB.xls" NBar = "stampB1.0" For i = 1 To Application.CommandBars(NBar).Controls.Count  'ボタンのキャプションと同じ名前のマクロを登録  With Application.CommandBars(NBar).Controls.Item(i)   .OnAction = MyWB & "!" & .Caption  End With Next i これをどのように改良したら、サブメニュー内のボタンにもマクロを登録できるようになりますでしょうか? ご存知の方どうぞよろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#1 のWendy02です。 #2/3さんのコードをみて、たぶん、ツールバーの構造は、そういうことなんだろうなって思いました。私のは無視してください。ただ、私は、元のツールバーのマクロで、そのような作り方はしませんから、まったく想像付きませんでした。 .OnAction = MyWB & "!" & .Caption 既に、何らかの方法で、名前とコントロールは置いておいて、それに、OnAction を後付けしているわけですね。マクロでボタン付けするなら、最初から、マクロで作ればよいのに、と思います。それとも、その都度変るものなのかもしれませんが。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

#2です。 Dim MyWB As String Dim NBar As String Dim i As Integer 全部書けば良かった (^^;)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

再起呼び出しをしています。 For i = 1 To Application.CommandBars(NBar).Controls.Count 'ボタンのキャプションと同じ名前のマクロを登録 SetAction Application.CommandBars(NBar).Controls.Item(i), MyWB Next i Private Function SetAction(Ctl As CommandBarControl, Book As String) Const ButtonOnly As Boolean = True 'PopUpにもマクロがある場合にはこれを「False」に Dim i As Integer On Error Resume Next With Ctl If .Type = msoControlButton Then .OnAction = Book & "!" & .Caption ElseIf .Type = msoControlPopup Then If Not ButtonOnly Then .OnAction = Book & "!" & .Caption End If For i = 1 To Ctl.Controls.Count SetAction Ctl.Controls.Item(i), Book Next End If End With End Function

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 ツールバーの構造がどうなっているか、そのコードでは読み取れませんが、Add メソッドを使わない限りは、出来ないと違いますか? >  .OnAction = MyWB & "!" & .Caption それに、これは、理屈に合いません。 .OnAction = MyWB & "!" & "マクロ名" .Caption ="マクロ名" となるので、例えば、ボタンにした場合は、以下のようになるのではないでしょうか?コントロールの数があれば、その数だけ作ることになるかと思います。 Set CB = Application.CommandBars(NBar)  With CB.Controls.Add(Type:=msoControlButton)   .OnAction = MyWB & "!" & "マクロ名"   .Caption = "マクロ名"   .Visible = True  End With

関連するQ&A

  • エクセル2007で自前のツールバーを作る方法

    エクセル2000です。 以下のマクロで自前の新しいツールバーが作れ、作動します。 ところがエクセル2007ではうんともすんとも言ってくれません。 エクセル2007で使う場合はどのようにしたらよいでしょうか? ユーザーフォームで似たようなものを作る方法はわかるのですが、できれば以下の方法を使いたいのです。 Sub 三択メニュー() On Error Resume Next Application.CommandBars("選択します").Delete On Error GoTo 0 Application.CommandBars.Add Name:="選択します", Position:=msoBarFloating With Application.CommandBars("選択します") .Visible = True .Controls.Add Type:=msoControlButton With .Controls(1) .Style = msoButtonCaption .Caption = "⇒メニュー1 " .OnAction = "Msg_1" End With .Controls.Add Type:=msoControlButton With .Controls(2) .Style = msoButtonCaption .Caption = "⇒メニュー2 " .OnAction = "Msg_2" End With .Controls.Add Type:=msoControlButton With .Controls(3) .Style = msoButtonCaption .Caption = "⇒メニュー3 " .OnAction = "Msg_3" End With End With End Sub Sub Msg_1() Application.CommandBars("選択します").Delete MsgBox "追加コマンド1を処理しました。" End Sub Sub Msg_2() Application.CommandBars("選択します").Delete MsgBox "追加コマンド2を処理しました。" End Sub Sub Msg_3() Application.CommandBars("選択します").Delete MsgBox "追加コマンド3を処理しました。" End Sub

  • メニュー登録のマクロの書き方

    エクセルを開いた時のツールバーで、 「ファイル」を選択すると「新規作成」などのメニューが出ますよね。 その中に「印刷範囲」というメニューがあり、 これにカーソルを合わせると更に右に「印刷範囲の設定」「印刷範囲のクリア」というメニューが出てきます。 この、2階層持つメニューをマクロで作成したいのですが、可能でしょうか。 1階層だけであれば、 Set menu1 = Application.CommandBars("worksheet menu bar"). _ Controls.Add(Type:=msoControlPopup, Temporary:=True) menu1.Caption = "ツールバーに表示させるメニュー名" .Controls.Add Type:=msoControlButton With .Controls(1) .Caption = "メニュー1" .OnAction = "メニュー1のマクロの名前?" End With という記述で実現できました。

  • EXCEL VBA でマクロが作動するシートとしないシートがある。

    右クリックのショートカットメニューに作成したマクロを追加しました。その追加マクロを実行しても右クリックのショートカットに追加されないシートがあります。同じbookでもその他のシートでは、右クリックのショートカットメニューに追加されているものもあります。 なぜでしょうか? できないのは、右クリックのショートカットの表示です。目的の動作(下記の場合は、フォントの色を変える)は、どのシートでも作動します。 ちなみにプロシージャーは次のように書いています。PERSONAL.XLSに登録してあります。 宜しくお願いします。 'セルの右クリックショートカットメニューを作成 Sub 色々右クリック() 赤みぎクリック 黒みぎクリック 青みぎクリック End Sub Sub 赤みぎクリック() Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "赤" .OnAction = "赤フォント" .BeginGroup = False End With End Sub Sub 赤フォント() Selection.Font.ColorIndex = 3 End Sub Sub 黒みぎクリック() Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "黒" .OnAction = "黒フォント" .BeginGroup = False End With End Sub Sub 黒フォント() Selection.Font.ColorIndex = 1 End Sub Sub 青みぎクリック() Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "青" .OnAction = "青フォント" .BeginGroup = False End With End Sub Sub 青フォント() Selection.Font.ColorIndex = 5 End Sub Sub Reset_RightClick() Dim rightBar As CommandBar Application.CommandBars("cell").Reset End Sub

  • Excel VBA で自作ツールバーにマクロを登録する際のテクニック

    Excel VBAで新たなツールバーを作成ならびに表示をするマクロを記述しました。ツールバーにはコマンドボタンを貼り付け、さらにコマンドボタンには他のマクロを登録しています。 処理の実行自体はうまくいったのですが、実際にツールバーが現れたときに、ボタンのイメージだけではなく、 テキストも同時に表示させたいのですが、なかなかうまくいきません。 (手作業に言い換えると「選択したボタンの編集」ボタンから「イメージとテキストを表示」にチェックをつけたい) ちなみに記述したコードは次のとおりで、私の予想では ★の部分に何か追加するのではないかと思うのですが。 色々と調べてみたのですが、なかなか良い答えが見つけられず・・・・ どうぞ、よろしくお願いいたします。 **↓ Dim MyCombar As CommandBar Dim MyBtn AsCommandBarButton ' ツールバー「シート初期化」作成 Set MyCombar = Application.CommandBars.Add(Name:="シート初期化") '「シート初期化」の表示場所 With MyCombar .Top = 200 .Left = 400 .Visible = True End With ' シート初期化」にマクロ『Clear_Sheet』登録 Set MyBtn = MyCombar.Controls.Add(Type:=msoControlButton, ID:=2950) With MyBtn .OnAction = "Clear_Sheet" .Caption = "シート初期化" '★→ここの部分に、何か追加? End With

  • Excell2010VBAmacro互換性

    マイクロソフトオフィス2010EXCELマクロについて質問させてください。 VBAマクロでマウス右クリック時にポップアップメニューを出し、 自作マクロを呼び出すようにしました。動作している。 このマクロを別PCのオフィス2013で動作させると、 マクロ内部ではポップアップメニューを作成動作している ようです(デバッグで通っていること確認)ようですが、 EXCEL画面上にはメニューが表示されません。 サンプルマクロは下記参照。 非互換または設定漏れがあるのでしょうか?   サンプルマクロ Sheet1 --------------------------------------- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Application.CommandBars("Cell").Reset '右クリックメニューを初期設定に戻す Call set_RightMenu '右メニュー登録 End Sub Module1 --------------------------------------- Sub reset_RightMenu() ' '右クリックメニューを初期化 ' Application.CommandBars("Cell").Reset End Sub Public Sub set_RightMenu() ' ' 右クリックメニューを設定する ' Call reset_RightMenu '右クリックメニュー初期化 With Application.CommandBars("Cell") _ .Controls.Add() .BeginGroup = True .Caption = "menu0" .FaceId = 682 .OnAction = "menu0" End With With Application.CommandBars("Cell") _ .Controls.Add(Type:=msoControlPopup) .BeginGroup = True .Caption = "SubMenu" With .Controls.Add(Type:=msoControlButton) .Caption = "menu1" .FaceId = 931 .OnAction = "menu1" End With With .Controls.Add(Type:=msoControlButton) .Caption = "menu2" .FaceId = 931 .OnAction = "menu2" End With End With End Sub Sub menu0 MsgBox "****** Menu 0 *******" End Sub Sub menu1 MsgBox "****** Menu 1 *******" End Sub Sub menu2 MsgBox "****** Menu 2 *******" End Sub

  • ExcelVBA AddinでOnAction

    ツールバーにボタンを作って、そのボタンをクリックしたら OnActionプロパティ で指定したマクロを実行するというワークブックを作りアドイン化しました。 以下、アドインのマクロ。 ThisWorkbookに Private Sub Workbook_Open() ' ツールバーを削除 On Error Resume Next Application.CommandBars("MyMenu1").Delete On Error GoTo 0 With Application.CommandBars.Add(Name:="MyMenu1") .Visible = True .Position = msoBarBottom .RowIndex = 1 .Controls.Add (msoControlButton) With .Controls.Item(1) .Caption = "test1" .OnAction = "a" .FaceId = 59 End With End With End Sub 標準モジュールに Public Sub a() MsgBox "アドイン" End Sub としました。 これでこのアドインをExcelに登録すれば、どのファイルを開いた時でも ツールバーのボタンをクリックすれば、アドインのマクロが実行されます。 が、上記OnActionに記述したのと同じ名前のサブルーチンが、 今アクティブになっているワークブックにあった場合には、アドイン側の サブルーチンではなく、ワークブック側のが実行されてしまいます。 色々検索した結果、 OnActionの指定を「.OnAction = Thiswokbook.FullName & "!a"」とすればよい という記述を目にし、その通りにしましたが効果ありませんでした。 なお、Excel2000または2003で起きました。2010では通常にアドイン側のサブルーチンが 起動しています。 取りあえず、誰もつけそうにない名前をアドイン側のサブルーチンにつけていますが、 これしか手立てはないものでしょうか?

  • Excelで追加した右クリックメニューが動かない

    Windows Vista Excel2007です。 Sheet1に、次のようにVBAでプログラミングしたのですが、 '------------------------------------------------------------------------------- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)   Application.CommandBars("Cell").Reset   With Application.CommandBars("Cell").Controls.Add()     .Caption = "テスト"     .OnAction = "test"   End With End Sub Public Sub test()   MsgBox "OK" End Sub '------------------------------------------------------------------------------- 右クリックメニューには追加できたのですが、その「テスト」メニューをクリックすると、 次のようなエラーダイアログが表示されます。 「マクロ'Book1!test'を実行できません。このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。」 セキュリティセンターは「すべてのマクロを有効にする」に設定しており、他のマクロは正常に動作します。 どうしてエラーになるのか全く分かりません。 どなたか原因をご存知の方、ご教示をお願いします。

  • Word ツールバーの削除

    下記の様なマクロを組み込みました。 しかしこのマクロ自体不必要になったので削除したのですがツール→ユーザー設定→ツールバーにはツールバー及びボタンが残ってしまいました。 ツール→ユーザー設定→ツールバーで削除をすれば消えますが新たにWordを立ち上げると消えていません。 マクロでCommandBars("Indent").Deleteともしましたが結果は同じでした。 どうすれば消えるのでしょうか?どなたかご教授願います。 Sub auto_open() Dim myBar As CommandBar, myButton As CommandBarButton '新しいMenuBarを追加 Set myBar = CommandBars.Add 'MenuBarに名前を設定 myBar.Visible = True myBar.Name = "Indent" myBar.Position = msoBarTop '新しいボタンを追加 Set myButton = myBar.Controls.Add With myButton .Caption = "[チュックインデント]" .Style = msoButtonCaption End With 'ボタンが押下時実行マクロ設定 myButton.OnAction = "checkIndent" myBar.Visible = True End Sub Sub auto_close()

  • エクセル2003 自作ツールバー(コマンドバー)の選択戻り値取得方法

    ツールバーのショートカットを自作して 入力を楽にしようと考えております。 ツールバーには、直接入力するリストを表示させ そのリストの中から選んで、セルに記入させると 言うマクロを作ろうとしているのですが、 選択された、リストの戻り値を取れないため、 苦戦しております。 戻り値の取得方法とかあるのでしょうか? 宜しくお願いいたします。 コードを以下に記します。 Option Explicit Option Base 1 Dim myCB As CommandBar Dim myCBCtrl As CommandBarButton Dim myData() As String Dim n As Integer, i As Integer ---------------------------------------------------------------- Sub AddCmdBarBtn() Call 配列 On Error Resume Next CommandBars("MyMacro2").Delete Set myCB = Application.CommandBars.Add(Name:="MyMacro2", _ Position:=msoBarPopup, Temporary:=True) For i = 1 To 5 Set myCBCtrl = myCB.Controls.Add(Type:=msoControlButton) With myCBCtrl .Caption = myData(i) .OnAction = "ツールバーマクロ" End With Next i myCB.ShowPopup End Sub ---------------------------------------------------------------- Private Sub ツールバーマクロ() ActiveCell.Value = myCB.Controls.Item.Caption<<<此処を上手く処理できません(泣) End Sub ---------------------------------------------------------------- Private Sub 配列() ReDim myData(5) For n = 1 To 5 myData(n) = "名前" & n Next n End Sub ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

  • EXCEL VBA:シートの右クリックメニューへの追加方法

    (1)EXCEL VBAで、シートの右クリックメニューへの追加方法が下記の通り、ある本に載っていたので試してみましたが、うまく動作しません。 どこが間違っているか教えて下さい。  Sub シートの右クリックメニュー追加()  With CommandBars("Ply").Controls.Add  .Caption = "AAA(メニューの表示文字)"  .OnAction = "BBB(実行するマクロ名)"  .BeginGroup = True  End With  End Sub (2)上記「シートの右クリックメニュー追加」+BBBマクロをアドインへ組み込み、皆さんへ配布して、右クリックメニューで動作させたいのですが、やり方を教えて下さい。 宜しく、お願いします。

専門家に質問してみよう