コマンド バーのイベントを使用する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

コマンド バーのイベント プロシージャを使用して、イベントに応答するカスタム コードを実行することができます。また、組み込みコントロールの既定の動作に対するカスタム コードにそのイベント プロシージャを代用することもできます。CommandBars コレクション、CommandBarButton オブジェクト、および CommandBarComboBox オブジェクトは、次のイベント プロシージャを公開してイベントに応答するコードを実行します。

  • CommandBars コレクションは OnUpdate イベントをサポートします。このイベントは、表示されるコマンド バーまたはコマンド バー コントロールの状態に反映されることがある Office ドキュメントへの変更に応答して起動します。たとえば、OnUpdate イベントは、ユーザーが Office ドキュメントで選択項目を変更した場合に起動します。このイベントを使用して、ユーザーの操作に応答してコマンド バーまたはコマンド バー コントロールの機能または状態を変更できます。

    重要   OnUpdate イベントはさまざまな状況で使用できます。多くの処理または動作を実行するコードにこのイベントを追加すると、ソリューションのパフォーマンスに影響する場合があります。

  • CommandBarButton コントロールは、ユーザーがコマンド バー ボタンをクリックしたときに起動する Click イベントを公開します。このイベントを使用して、ユーザーがコマンド バー ボタンをクリックしたときにコードを実行することができます。

  • CommandBarComboBox コントロールは、ユーザーがコンボ ボックス コントロールで選択を行ったときに起動する Change イベントを公開します。このメソッドを使用して、コマンド バーのコンボ ボックス コントロールでユーザーが行った選択に従って動作を実行することができます。

これらのイベントを公開するには、WithEvents キーワードを使用し、クラス モジュールでオブジェクト変数を宣言する必要があります。クラス モジュールの宣言セクションに入力した次のコードにより、カスタム ツール バーの CommandBars コレクション、3 つのコマンド バー ボタン、およびコンボ ボックス コントロールを表すオブジェクト変数を作成します。

  Public WithEvents colCBars         As Office.CommandBars
Public WithEvents cmdBold          As Office.CommandBarButton
Public WithEvents cmdItalic        As Office.CommandBarButton
Public WithEvents cmdUnderline     As Office.CommandBarButton
Public WithEvents cboFontSize      As Office.CommandBarComboBox

WithEvents キーワードを使用してクラス モジュールでオブジェクト変数を宣言すると、コード ウィンドウの [オブジェクト] ボックスにオブジェクトが表示され、オブジェクトを選択すると [プロシージャ] ボックスでオブジェクトのイベントを選択することができます。たとえば、clsCBarEvents クラス モジュールに上記のコードが含まれる場合、[オブジェクト] ボックスのリストで、colCBars、cmdBold、cmdItalic、cmdUnderline、および cboFontSize オブジェクトを選択できます。また、各オブジェクトのイベント プロシージャのテンプレートが、次のようにクラス モジュールに追加されます。

  Private Sub colCBars_OnUpdate()
   ' Office ドキュメントで選択項目を変更すると実行されるコードを
   ' 挿入します。
End Sub

Private Sub cmdBold_Click (ByVal Ctrl As Office.CommandBarButton, _
                           CancelDefault As Boolean)
   ' このイベントに応答して実行するコードを挿入します。
End Sub

Private Sub cmdItalic_Click (ByVal Ctrl As Office.CommandBarButton, _
                             CancelDefault As Boolean)
   ' このイベントに応答して実行するコードを挿入します。
End Sub

Private Sub cmdUnderline_Click (ByVal Ctrl As Office.CommandBarButton, _
                                CancelDefault As Boolean)
   ' このイベントに応答して実行するコードを挿入します。
End Sub

Private Sub cboFontSize_Change (ByVal Ctrl As Office.CommandBarComboBox)
   ' コンボ ボックスで選択が行われたときに実行するコードを挿入します。
End Sub

イベント プロシージャには、イベントが発生したときに実行するコードを追加します。

メモ   コマンド バー コントロールのオブジェクト変数を組み込みコマンド ボタンに設定する場合、Click イベントの CancelDefault 引数を True に設定して、ボタンの既定の動作を回避することができます。この操作は、アドインを作成して、組み込みボタンがクリックされたときに起動するアプリケーション コードの代用または追加として実行する場合に便利です。

イベント プロシージャにコードを追加したら、標準モジュールまたはクラス モジュールでクラスのインスタンスを作成し、Set ステートメントを使用してコントロール イベントを特定のコマンド バー コントロールにリンクします。次の例では、InitEvents プロシージャを標準モジュールで使用して、clsCBarEvents オブジェクト変数を "書式設定の例" ツール バーの特定のコマンド バー コントロールにリンクします。

  Option Explicit
Dim clsCBClass As New clsCBEvents

Sub InitEvents()
  Dim cbrBar As Office.CommandBar

  Set cbrBar = CommandBars("Formatting Example")
  With cbrBar
    Set clsCBClass.cmdBold = .Controls("太字(&B)")
    Set clsCBClass.cmdItalic = .Controls("斜体(&I)")
    Set clsCBClass.cmdUnderline = .Controls("下線(&U)")
    Set clsCBClass.cboFontSize = .Controls("フォント サイズの設定(&F)")
  End With
  Set clsCBClass.colCBars = CommandBars
End Sub

InitEvents プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH06 サブフォルダに含まれる CommandBarEvents.doc の modStartupCode モジュールにあります。

InitEvents プロシージャを実行すると、関連するイベントが発生したときにコマンド バーまたはコマンド バー コントロールのイベント プロシージャに挿入したコードが起動します。

クラス モジュールを使用してコマンド バーおよびコマンド バー コントロールのイベントをリンクし、テキストの書式設定の情報を指定および確認する例は、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH06 サブフォルダに含まれる CommandBarEvents.doc ファイルを参照してください。

WithEvents キーワードの使用については、第 9 章「カスタム クラスとオブジェクト」を参照してください。アドイン アプリケーションでコマンド バー イベントを使用する場合の詳細については、第 11 章「アドイン、テンプレート、ウィザード、およびライブラリ」を参照してください。