ユーザーフォーム入門 - 住所入力フォームを作成する(9) 〜 起動処理|Excel VBA |
「ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理」までに、8回にわたってユーザーフォームの処理を作成してきました。
最後に、ユーザーフォームを起動する処理を作成しましょう。
まず、どこからどのタイミングでユーザーフォームを起動するかを考えます。
一般的には、次のような方法があります。
1. は、ブックを開くときは必ずそのユーザーフォームを使用するようなケースで用いられる方法です。2. や 3. は、ブックを操作中に、必要に応じてユーザー自身がマクロやユーザーフォームを呼び出すようなケースでよく用いられる方法です。
いずれか1つの方法を使っても、2つの方法を併用してもよいでしょう。
本連載で作成したブックは住所入力フォームの専用ブックなので、ブックを開いたと同時に自動的にユーザーフォームが表示されるよう、1. の方法で起動しましょう。
さらに、[終了]ボタンでユーザーフォームを閉じた後に再び起動するとき、ブックを開きなおすことなくユーザーフォームを起動できるよう、ワークシート上にもボタンを作っておきましょう。
ブックを開いたときに処理を実行するには、ブックのOpenイベントを使用します。
ブックのイベントは、ブックモジュールに記述します。
フォームモジュールがフォームに関連付けられたモジュールだったように、ブックモジュールはブックに関連付けられたモジュールです。
VBEのプロジェクトエクスプローラの中の、ThisWorkbookモジュールがブックモジュールです。
では、ブックモジュールにイベントプロシージャを作成しましょう。
次の手順で操作してください。
Option Explicit
Private Sub Workbook_Open()
End Sub
ユーザーフォームを表示するには、Showメソッドを使用します。
ユーザーフォームのShowメソッドには引数「Modal」があり、"モーダル"または"モードレス"のどちらで表示するかを指定できます。
モーダルとは、ユーザーフォームを表示しているとき、背後のExcelを操作できなくする表示方法です。開発者の意図しないユーザー操作を制限できますが、ユーザーの利便性は低くなります。モーダルで表示するには、引数Modalに「vbModal」を指定します。
一方、モードレスは、ユーザーフォームを表示したまま、ワークシートやブックなどのExcel操作が可能な表示方法です。モードレスで表示するには「vbModeless」を指定します。
ここでは、住所入力フォームを表示したまま、住所録のデータを編集したりコピーしたり、他のExcel操作ができるように、モードレスで表示しましょう。
Openイベントプロシージャに、次のように記述します。
Private Sub Workbook_Open()
myForm.Show vbModeless
End Sub
ボタンをクリックしたときにユーザーフォームを起動するには、ユーザーフォームを起動するプロシージャを用意しておき、ワークシート上に配置したボタンにそのプロシージャを割り当てます。
ただし、前項で作ったWorkbook_Openプロシージャをボタンに割り当てることはできません。
Workbook_Openプロシージャはブックを開いたときに実行されるイベントプロシージャだからです。
ワークシートに割り当てるプロシージャは標準モジュールに作成します。
標準モジュールは、どのオブジェクトにも関連付けられていない、汎用的なモジュールです。
VBEの[挿入]メニュー→[標準モジュール]を選択すると、コードウィンドウに新しい標準モジュールが作成されるので、そこに次のプロシージャを作成します。
Sub ShowUserForm()
myForm.Show vbModeless
End Sub
続いて、ワークシートにボタンを配置します。
Excelに画面を切り替えて、次のように操作してください。
なお、Excel 2003以前のバージョンについては、「Excel VBAビギナーズ > 第2回-ボタンクリックでマクロを実行」で手順を紹介しているので、参考にしてください。
ここまでできたら、ブックを保存して動作を確認しましょう。
いったんブックを閉じて再びブックを開くと、自動的にユーザーフォームが起動します。
このとき、ユーザーフォームの背後には住所録ファイルが開いて、編集可能な状態になっているはずです。
何件か、データを入力してみましょう。
[終了]ボタンでユーザーフォームを閉じた後は、再びワークシート上の[住所入力フォーム]ボタンからユーザーフォームを起動できることを確認しましょう。
以上で、住所入力フォームは完成です。
プロパティウィンドウを使用して、ユーザーフォームの「ShowModal」プロパティにFalseを設定する方法でも、モードレス表示が可能です。
「ユーザーフォーム入門 - 住所入力フォームを作成する(3) 〜 入力順序とIMEの設定」で入力順序を設定した際、誤登録を防ぐために[登録]ボタンをタブ移動順から外しましたが、連続して登録する場合は不便に感じるかもしれません。
その場合は、TabStopプロパティをTrueに戻し、[登録]ボタンにも移動するようにしてください。