ワークシートを使ったアプリケーションの作成にボタンだとか、コンボボックス、
リストボックスなどを使用していると、いつの日かかならず、
”あれっ、ほかにもボタンがある・・・”
などと思ったりするものです。
エクセルで使用するボタン類には
”フォーム”ツールバーから使用するものと、
”コントロールツールボックス”で使用するもの、の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”を検索しても標準では表示されな
いことをさしています。また、コーディング支援機能としてのメンバー表示機能も効きません。
オブジェクトブラウザでメンバーを表示させるには”クラス”のリスト中などで右クリックし、
”非表示のメンバーを表示”を選択します。
|