HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス(1)

即効テクニック

その他関連のテクニック

VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス(1)

(Excel 97/2000)

ワークシートを使ったアプリケーションの作成にボタンだとか、コンボボックス、リストボッ
クスなどを使用していると何時の日かかならず”あれっ、ほかにもボタンがある・・・”など
と思ったりするものです。

エクセルで使用するボタン類には”フォーム”ツールバーから使用するもの、”コントロールツールボックス”で使用するもの、の2種類があるのです。ここでは両者の違いについて考察します。なお、コントロール、という場合は通常”コントロールツールボックス”のボタン等
(ActiveXコントロール)のことをさします。ここでは、”フォーム”ツールバーのボタン類は”フォームコントロール”と呼びます。

※どちらのツールバーもメニューの”表示 − ツールバー”で選択するか、もしくは”ツール
 − ユーザ設定”から表示されるダイアログの”ツールバー”タブで表示されるリストから対象となるツールバーをチェックすることにより表示させることができます。

【主な相違点】
1.コードの記述場所
2.イベントへの対応
3.貼り付け先(シート以外の場合)
4.用意されているプロパティーやメソッドなど

■1.コードの記述場所■
(フォーム)・・・   標準モジュールのみ
(コントロール)・・・ コントロールを貼り付けたオブジェクトモジュール
            (ワークシート、ユーザフォーム)などに記述する。

そもそも、フォームツールバーのボタン類はエクセル95の頃から用いられていたものです。
エクセル95にはワークシートなどと同列にエクセルのメイン画面から使用するモジュールシートがあり、ここにコーディングをしていました。
また、ユーザーが独自に定義するダイアログには”ダイアログシート”があり、フォームコントロールはワークシート、ダイアログシート、のいずれかに配置し、モジュールシートに記述されたマクロを登録することにより、実行がなされていたのです。

---------------------------------------------------------------------------------
(How To 1)

例えば、標準モジュールに記述されたプロシージャをボタンから実行する場合・・

フォームツールバーのボタンをシート上に配置したとき(あるいはボタンを選択、右クリックによるショートカットメニューから”マクロの登録”を選んで)に現れる”マクロの登録”ダイアログボックスで、リスト中に表示されるプロシージャ名を選択して”OK"をクリック。

新たにプロシージャを作成する場合は”新規作成”を選択すると、VBEが起動し、自動的に標準モジュールにSubプロシージャの雛型が作成されます。

---------------------------------------------------------------------------------

その後、97でVBA機能が強化され、Visual Basic Editor(VBE)を用いて開発するようになると同時に、”コントロール”やユーザーフォームが追加され、大幅な機能強化が図られました。
コーディングはVBEから、コマンドボタンクリック時のプロシージャなどをオブジェクトモジュールに記述し、必要に応じて標準モジュールに記述した関数を呼び出したりするといったスタイルがとられるようになりました。

---------------------------------------------------------------------------------
(How To 2)

コマンドボタンのクリックイベントで、標準モジュールに記述したSubプロシージャを呼び出します。

・ワークシートにコマンドボタンを配置してそのままダブルクリック、あるいはコマンド ボタンを選択した状態で右クリック。
表示されたショートカットメニューから”コードの表示”を選択。
	↓
・VBEが起動し、コマンドボタンを配置したシートに対応するシートモジュールが表示され、同時にコマンドボタンのクリックイベントプロシージャの雛型が挿入されます。
	↓
・コードを記述します。

(Sample)
Private Sub CommandButton1_Click()

Call 標準モジュールに記述したプロシージャ名

End Sub
---------------------------------------------------------------------------------

■2.イベントへの対応■

(フォーム)・・・  基本的に”イベント”という考え方はありません。
(コントロール)・・ ボタンクリックやテキストボックスの値の変化など、ユーザーの操作にしたがって発生するさまざまなイベントを基準として用意されたイベントプロシージャを利用します。

1で触れたように、”マクロの登録”を基本とするフォームコントロールはクリックと値の変化にしか対応できません。
これに対し、”コントロールツールボックス”の各コントロールはClickイベント、Changeイベント、のほか、Mouse操作ではMouseDown、MouseUpなど、Key操作ではKeyDown,KeyUpなど、多彩なイベントが用意されており、何を行うかによって対応するイベントプロシージャにコードを記述すればよいのです。

■3.貼り付け先(シート以外)■

(フォーム)・・・  ダイアログシート
(コントロール)・・ ユーザフォーム

ワークシートに貼り付けることができる点では両者変わりませんが、ユーザ定義のダイアログを作成しようとするとき、貼り付け先となるベースが異なります。

---------------------------------------------------------------------------------
(How To 3)

・ダイアログシートの挿入

ワークシートのタブの上で右クリック、”挿入”を選択。挿入ダイアログから
”MS Excel 5.0ダイアログシート”を選択。
                          ↓
OK、キャンセルボタンのついたダイアログシートが挿入される
                          ↓
エディットボックス(テキストボックスコントロールに相当)やボタン等の
フォームコントロールを貼り付ける
                          ↓
フォームコントロールの右クリックで表示されるショートカットから”コントロ
ールの書式設定”で初期設定などを行う。
                          ↓
標準モジュールにプロシージャを記述し、マクロの登録を行います。

※エクセル95の場合は”挿入”メニューより”マクロ−ダイアログ”を選択
 してダイアログシートを挿入。

このように、ダイアログシートはエクセルのメイン画面上にワークシートと並列される形で表示され、Visual Basic Editorから挿入、イベント処理を行うユーザフォームとは扱いが大きく異なります。エクセル95でもアプリケーションの使用が想定される場合を除いて、ダイアログシートを97や2000で使用する必要はありません。

---------------------------------------------------------------------------------
■4.用意されているプロパティーやメソッドなど■

エクセルVBAを97や2000から使い始めた方は、フォームコントロールをVBAでどのように取り扱えばよいのかはご存知でないのではないでしょうか?
それは、VBA解説書などで扱っていないこともありますが、基本的にフォームコントロールのプロパティーなどは”非表示”となっていることも関係しているでしょう。
ここで”非表示”というのは、例えばEditBoxのメンバーを調べるためにVBEからオブジェクトブラウザで”EditBox”を検索しても標準では表示されないことをさしています。
また、コーディング支援機能としてのメンバー表示機能も効きません。
オブジェクトブラウザでメンバーを表示させるには”クラス”のリスト中などで右クリックし、”非表示のメンバーを表示”を選択します。