皆様こんにちは、ノグチです。
前回は、ユーザーフォームにいくつかコントロールを追加して、そのユーザーフォームをワークシートから呼び出す方法をご紹介しました。
今回からは、作成したユーザーフォームと各コントロールのプロパティやイベントを使って、色々な動作をさせていきましょう!
本稿では、コマンドボタンのイベントをご紹介していきますよ。
前回までのおさらい
まずは、前回作成したユーザーフォームがこちら。
ユーザーフォームにテキストボックスやコマンドボタンといったコントロールを配置して、ユーザーフォーム自体のオブジェクト名を、「MyForm」という任意の名前に変えたのでした。
今回は、このフォーム上にある、コマンドボタンが主役です。
コマンドボタンのオブジェクト名を変更する
コマンドボタンも、ユーザーフォーム同様に、任意のオブジェクト名にすることができます。
VBAコード内での記述し易さと分り易さのために、オブジェクト名を判別しやすいものに変えておきましょう。
コマンドボタンのプロパティシートを開いて…
「(オブジェクト名)」という項目の値を変えれば、コマンドボタンのオブジェクト名を変更することができます。
今回は、「btnOK」としておきましょう。
コマンドボタンのイベントに任意の処理をセットする
コマンドボタンのオブジェクト名を変更したところで、コマンドボタンのイベントを使ってみましょう。
イベントは、コントロールに対して特定の操作が行われた時に実行されるもので、各イベントに対応したイベントプロシージャに処理を記述することで、そのイベントが実行された時に任意の処理をさせることができます。
イベントに対応したイベントプロシージャを開く
イベントに処理を追加する場合は、対応したイベントのイベントプロシージャ内に処理を記述していきます。
VBEでユーザーフォームを開き、コマンドボタンをダブルクリックするか、コントロールを選択して右クリック>「コードの表示」をクリックすると、自動的にコマンドボタンのイベントプロシージャが表示されます。
自動的に表示されたイベントプロシージャ以外のイベントを使いたい場合は、画面右側にあるドロップダウンリストの中から、使いたいイベントを選択すれば、選択したイベントプロシージャが自動的に表示されますよ。
Clickイベント
コマンドボタンのイベントに、Clickイベントがあります。
このイベントは、コマンドボタンがクリックされた時に実行されるイベントで、コマンドボタンのイベントとして使われる頻度が最も高いものでしょう。
ユーザーフォームでコマンドボタンを配置したら、必ず使うと言っても過言ではありません。
Clickイベント時に何らかの処理をさせたい場合、例えばこんな風に記述します。
Private Sub btnOK_Click() MsgBox "ボタンがクリックされました!" End Sub
コマンドボタンがクリックされたら、メッセージを表示する、というコードです。
このコードを保存して、ユーザーフォーム上のコマンドボタンをクリックしてみると…
この通り、Clickイベントプロシージャ内に記述した処理が実行されます。
DblClickイベント
コマンドボタンのイベントには、ボタンをダブルクリックした時のイベント、DblClickイベントもあります。
このイベントを使うには、Clickイベント同様に、対応したイベントプロシージャに処理を書き込めばOK。
例えばこんな風に。
Private Sub btnOK_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox "ダブルクリックされました! End Sub
そしてコマンドボタンをダブルクリックすると、イベントプロシージャ内に記述した処理が実行されますよ。
注意点
ClickイベントとDblClickイベントをご紹介しましたが、この2つのイベントを同一のコマンドボタンに対して使おうとする場合は、注意が必要です。
Clickイベントは、ボタンがクリックされれば即実行されます。
Clickイベントでユーザーフォームを閉じたり、メッセージを表示したりといった、操作の主体がユーザーフォームでなくなる処理をさせると、ユーザーフォームが2回目のクリックを認識することができず、DblClickイベントが実行されません。
同一のコマンドボタンに対してはClcikイベントとDblClickイベント両方を使わないようにするか、処理の内容や順番を考える必要がありますね。
クリックしてユーザーフォームを閉じる
Unloadステートメントでユーザーフォームを閉じる
コマンドボタンのイベントが使えるようになったので、コマンドボタンをクリックしたらユーザーフォームを閉じる、という処理をさせてみましょう。
ユーザーフォームを閉じるには、Unloadステートメントを使います。
記述方法はこちら。
例えば、「MyForm123」というユーザーフォームを閉じたい場合、
Unload MyForm
と記述すればOKです。
Clickイベントプロシージャに処理をセットする
次はこのUnloadステートメントを、コマンドボタンのイベントプロシージャの中に記述しましょう。
コマンドボタンのClickイベントプロシージャに、このように記述します。
Private Sub btnOK_Click() Unload MyForm End Sub
そしてユーザーフォームを一旦開いて、コマンドボタンをクリックすると…
ユーザーフォームが閉じられましたね。
最後に
今回は、コマンドボタンのClickイベントとDblClickイベントをご紹介しました。
今回ご紹介したように、ユーザーフォームの各コントロールのプロパティとイベントを使えば、様々な動作をさせることができますよ。
次回は、テキストボックスのプロパティとイベントをご紹介していきます。
それでは、最後までお読みいただき有難うございました!
連載目次:【エクセルVBA】ユーザーフォームを使ってみよう!
ユーザーフォームは、ちょっとした画面なら作れてしまう、便利な機能です。
何となく敷居が高いように感じてしまいますが、順を追っていけば難しいことはありませんよ。
- 【エクセルVBA】ユーザーフォームを作ってみよう!VBEでフォームを挿入する方法
- 【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
- 【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
- 【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
- 【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう
- 【エクセルVBA】Initializeイベントでワークシートの値をユーザーフォームの初期値にセットする
- 【エクセルVBA】AfterUpdateイベントでテキストボックス同士を連動させてみよう
- 【エクセルVBA】コマンドボタンのClickイベントでワークシートを更新してみよう
- 【エクセルVBA】ユーザーフォームのリストボックスを使ってみよう!
- 【エクセルVBA】リストボックスのRowSourceプロパティの値を変動させてみよう!
- 【エクセルVBA】AddItemメソッドでリストボックスに値を追加してみよう!
- 【エクセルVBA】リストボックスのListプロパティで複数列の値を更新する
- 【エクセルVBA】ユーザーフォームにコンボボックスを追加する方法
- 【エクセルVBA】コンボボックスに値をセットする2つの方法 RowSourceプロパティとAddItemメソッド