即効テクニック |
たとえば、新しいツールバーを挿入するには次のようにします。Sub Sample1() Dim myBar, myButton Set myBar = CommandBars.Add Set myButton = myBar.Controls.Add myButton.FaceId = 272 myButton.OnAction = "myMacro" myBar.Visible = True End Sub Sub myMacro() MsgBox "Hello" End SubSample1を実行すると新しいツールバーが挿入されて、ボタンを1つ配置します。 ボタンには音符のアイコンを表示し、クリックされるとmyMacroが実行されます。 このように、ツールバーにボタンを配置するのは、それほど難しくありません。 実はツールバーには、ボタン以外のコントロールを配置することも可能です。 ここでは、ツールバーにテキストボックスを配置する方法を解説します。Sub Sample2() Dim myBar, myButton Set myBar = CommandBars.Add Set myButton = myBar.Controls.Add(Type:=msoControlEdit) myButton.Caption = "EditBox" myButton.TooltipText = "検索語を入力してEnterキーを押してください" myButton.OnAction = "SheetSearch" myBar.Visible = True End Subツールバーにテキストボックスを配置するには、ControlsコレクションのAddメソッドで 引数TypeにmsoControlEditという定数を指定します。 配置されたテキストボックスのCaptionプロパティは、そのテキストボックスを識別するための名前になり、テキストボックスに入力された文字列は、次のように取得できます。
CommandBars("ユーザー設定 1").Controls("EditBox").Textツールバーの名前は実行する環境によって異なります。 TooltipTextプロパティに設定した文字列は、テキストボックスにマウスポインタを合わせたときに表示されるツールチップとなります。 テキストボックス上でEnterキーが押されたときに実行されるプロシージャをOnActionプロパティに設定します。 ここでは、テキストボックスに入力された文字列をアクティブシート上で検索する次のようなマクロを作ってみました。Sub SheetSearch() Dim FoundCell Set FoundCell = Cells.Find(What:=CommandBars.ActionControl.Text) If Not FoundCell Is Nothing Then FoundCell.Activate End Subここでは汎用性を高めるために、操作されたテキストボックスをActionControlで取得していますが、もちろん名前で特定することも可能です。 エラー処理などは割愛していますが、ツールバーからシートを検索できるので便利です。