• 締切済み

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

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 現状は、Captionプロパティに設定した文字列が、ボタンをマウスでポイントした際のツールチップとして表示されていると思います。 ここで、TooltipTextプロパティにCaptionプロパティとは別の文字列を設定すれば、Captionプロパティの文字列がテキストとして表示されます。 ちなみに、FaceIdプロパティに1~4393までの数値を指定すると、対応するボタンイメージで表示出来ます。

endorin
質問者

お礼

ありがとうございました。 答えはここにありました。 http://www2.moug.net/cgi-bin/technic.cgi?exvba+TI08010022 教えていただいた FaceID も試してみます。

endorin
質問者

補足

さっそくの回答ありがとうございました。 実は先ほどからあらゆることを試していて TooltipTextプロパティも試してみたところです。 確かに、ボタンをマウスでポイントすると、指定した文字列がヘルプ的に表示されるのですが、そうではなくて、マウスでポイントしなくても、イメージとCaptionプロパティーに定義した文字列が同時に表示できるようにしたいのです。 私の説明が悪いと思うので、手作業で同じ作業をおこなった際の手順を記述します。 1.「ユーザ設定」ダイアログボックスを表示 2.編集をおこなう対象となるツールバーのボタンをクリック(ボタンがで選択される(黒枠で囲まれる))。 3.2の状態で右クリックでショートカットメニューから 「イメージとテキストを表示」を選択 →イメージとキャプションで定義した文字列が同時に表示される。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 これをどのように改良したら、サブメニュー内のボタンにもマクロを登録できるようになりますでしょうか? ご存知の方どうぞよろしくお願いします。

  • 自作のツールバーに登録するマクロについて

    Excel97, Windows98SEを使用しています。 「表示」-「ツールバー」-「ユーザー設定」の「ツールバー」タブ「新規作成」で、「stamp」という名前のツールバーを作成しました。 このツールバーのコマンドボタンにマクロを登録して使いたいのですが、  Macro1:コマンドボタンAをクリックすると図aをコピーして貼りつける  Macro2:コマンドボタンBをクリックすると図bをコピーして貼りつける  Macro3:コマンドボタンCをクリックすると図cをコピーして貼りつける  … という風に殆ど同じ作業ですので、これをひとつのマクロにまとめたいのですが、そういう事は可能でしょうか? たとえばSelect Caseを使って、  押したボタンがコマンドボタンAの場合、図aをコピーして貼りつける  押したボタンがコマンドボタンBの場合、図bをコピーして貼りつける のように記述できたら、と思っているのですが、 「押したボタンがコマンドボタン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 という記述で実現できました。

  • エクセル:マクロ処理

    エクセルファイルにマクロを入れておき、あるボタンを押したらそのマクロが1回だけ実行される。 というようにしたい。 (質問)   ボタンは、どう作るか。コマンドで作るのか。   ボタン処理のところのマクロ記述はどんな感じのコードか。   このファイルを開いたときマクロを有効とするかは有効にするでいいんですよね。 (参考) ワークシート   ボタン1を表示しておく   マクロ   ボタン処理   実行処理 マクロend

  • マクロの登録

    表示>ツールバー>コントロールボックス からコマンドボタンっていうのを作成したのですがそのボタンにマクロを登録する事は出来ないのですか? ダブルクリックすると Private Sub CommandButton1_Click() End Sub というのが作成されてしまいますがここから何かしなくてはいけないのですか? コマンドボタンを右クリックしても「マクロの登録」っていう項目がなくて困っています わかりやすく解説していただけたらありがたいです。

  • エクセル マクロ フォームにて

    エクセル マクロの記述教えて下さい! 1)エクセル Sheet1にコマンドボタンをクリックにてフォームが表示 2)UserForm1にコマンドボタンクリックにてUserForm2が表示 3)UserForm2に   OptionButton1(1、血圧)   OptionButton2(2、体温)   OptionButton3(3、脈)  と選択させてTextBox1に(1又は2・3)のみの数字番号だけ  表示させたい!  1の数字の場合は赤文字、2なら青文字にしたい! 4)UserForm2にコマンドボタンをクリックするとUserForm1の  TextBoxに数字(1~3)をそのまま表示させたい! すいません!分かりづらいですか?・・・今の段階での記述がこれです!が、下記の場合だと3)が文字(1、血圧)しか出来ません。 これを数字に認識させたいです! Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 3 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "ひとつも選択されていません" Exit Sub End If With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With Unload Me End Sub 色々追加記述が必要ですが、頭が混乱しています! 是非、教えて下さい!

  • Excel VBA 引数が2個のマクロの呼び出し方

    ExcelのVBAで、 シート上のボタンがクリックされた時に呼び出す マクロ(プロシージャ)の引数が1個の時は、 コード1のようにできましたが、 引数が2個ある時は、コード2のように記述しても、 ボタンをクリックするとエラーになりますが、 【?】の部分をどのように記述すればよいのでしょうか。 (Windows10,Excel2010) -------------------コード1---------------------------------------- Sub test1()  Dim row As Integer  Dim wave_file_path As String  For row = 1 To 2   wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value   Call ボタン作成(row, wave_file_path)  Next row End Sub Sub ボタン作成(ByVal row As Integer, ByVal wave_file_path As String)  Dim cell_loc As String  cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address  ThisWorkbook.Worksheets("Sheet1").Select  With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _   Range(cell_loc).Top, _   Range(cell_loc).Width, _   Range(cell_loc).Height)   .name = "ボタン_" & cell_loc   .OnAction = "'WAVE_PLAY """ & wave_file_path & "" & "'"   .Characters.Text = "再生"  End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String)  If Dir(wave_file_path) = "" Then   MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation   Exit Sub  End If  Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path End Sub ------------------------------------------------------------------- -------------------コード2---------------------------------------- Sub test2()  Dim row As Integer  Dim wave_file_path As String  For row = 1 To 2   wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value   Call ボタン作成(row, wave_file_path)  Next row End Sub Sub ボタン作成(ByVal row As Integer, ByVal wave_file_path As String)  Dim cell_loc As String  cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address  ThisWorkbook.Worksheets("Sheet1").Select  With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _   Range(cell_loc).Top, _   Range(cell_loc).Width, _   Range(cell_loc).Height)   .name = "ボタン_" & cell_loc   .OnAction = "'WAVE_PLAY """ & wave_file_path & "" & "," & row & "'" <==【?】   .Characters.Text = "再生"  End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String, ByVal row As Integer)  If Dir(wave_file_path) = "" Then   MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation   Exit Sub  End If  Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path  ThisWorkbook.Worksheets("Sheet1").Cells(row, 4).Value = "再生済" End Sub -------------------------------------------------------------------

  • エクセルVBA アドイン メニューの作成方法

    OS:windowsXP HomeEdition ソフト:Excel2003 アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、 作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が 展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが 何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。 以下に、私の作成したマクロを記述します。 マクロ解説HPで勉強しつつ作成致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~~ <ThisWorkBookへの記述> Dim mySubMenu As CommandBarControl Sub MakeSubMenu() Dim myMenu As CommandBar Dim cmdSubMenu As CommandBarControl 'すでにサブメニューがあれば削除する DelSubMenu Set myMenu = Application.CommandBars("worksheet Menu Bar") Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup) mySubMenu.Caption = "メニュー" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド1" 'サブメニューでコマンド1を選択したとき cmd1() を呼び出す cmdSubMenu.OnAction = "cmd1" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド2" 'サブメニューでコマンド2を選択したとき cmd2() を呼び出す cmdSubMenu.OnAction = "cmd2" End Sub Sub DelSubMenu() 'メニューバーのサブメニューを削除する On Error Resume Next mySubMenu.Delete End Sub <標準モジュールへの記述> Private Sub cmd1() MsgBox "コマンド1を選択しました" End Sub Private Sub cmd2() MsgBox "コマンド2を選択しました" End Sub ~~~~~~~~~~~~~~~~~~~~~~~ 尚、マクロは簡略化し、のせております。 よろしく御願い致します。

  • エクセル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 ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

専門家に質問してみよう