即効テクニック

メニューバー・ツールバー関連のテクニック

ツールバーでテキストボックスを使う

(Excel 97/2000/2002/2003)
たとえば、新しいツールバーを挿入するには次のようにします。

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 Sub
Sample1を実行すると新しいツールバーが挿入されて、ボタンを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で取得していますが、もちろん名前で特定することも可能です。 エラー処理などは割愛していますが、ツールバーからシートを検索できるので便利です。