HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザーフォーム入門 - 住所入力フォームを作成する(9) 〜 起動処理

ユーザーフォーム入門 - 住所入力フォームを作成する(9) 〜 起動処理|Excel VBA

ユーザーフォーム関連のテクニック

ユーザーフォーム入門 - 住所入力フォームを作成する(9) 〜 起動処理

(Excel 2002/2003/2007/2010/2013/2016)

ユーザーフォーム入門 - 住所入力フォームを作成する(8) 〜 終了処理」までに、8回にわたってユーザーフォームの処理を作成してきました。
最後に、ユーザーフォームを起動する処理を作成しましょう。

まず、どこからどのタイミングでユーザーフォームを起動するかを考えます。
一般的には、次のような方法があります。

  1. ブックを開いたときに、自動的にユーザーフォームを起動する
  2. ワークシート上にボタンを配置し、ユーザーがクリックして起動する
  3. メニューバーや、右クリックメニュー、ツールバー、クイックアクセスツールバー等にコマンドを配置し、ユーザーが起動する

1. は、ブックを開くときは必ずそのユーザーフォームを使用するようなケースで用いられる方法です。2. や 3. は、ブックを操作中に、必要に応じてユーザー自身がマクロやユーザーフォームを呼び出すようなケースでよく用いられる方法です。
いずれか1つの方法を使っても、2つの方法を併用してもよいでしょう。

本連載で作成したブックは住所入力フォームの専用ブックなので、ブックを開いたと同時に自動的にユーザーフォームが表示されるよう、1. の方法で起動しましょう。
さらに、[終了]ボタンでユーザーフォームを閉じた後に再び起動するとき、ブックを開きなおすことなくユーザーフォームを起動できるよう、ワークシート上にもボタンを作っておきましょう。

■ブックを開いたときに、自動的にユーザーフォームを起動する

ブックを開いたときに処理を実行するには、ブックのOpenイベントを使用します。
ブックのイベントは、ブックモジュールに記述します。
フォームモジュールがフォームに関連付けられたモジュールだったように、ブックモジュールはブックに関連付けられたモジュールです。
VBEのプロジェクトエクスプローラの中の、ThisWorkbookモジュールがブックモジュールです。

では、ブックモジュールにイベントプロシージャを作成しましょう。
次の手順で操作してください。

  1. VBEのプロジェクトエクスプローラから、[ThisWorkbook]アイコンをダブルクリックする

  2. オブジェクトボックスから[Workbook]を選択する
    既定のイベントであるOpenイベントプロシージャのひな形が作成されるので、ここにフォームを起動するコードを記述します。
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回-ボタンクリックでマクロを実行」で手順を紹介しているので、参考にしてください。

  1. [開発]タブ→[コントロール]グループ→[挿入]ボタンをクリックする
  2. [フォームコントロール]→[ボタン]ボタンをクリックする

  3. ワークシート上で適当な大きさにドラッグし、ボタンを配置する

  4. [マクロの登録]ダイアログボックスが表示されるので、「ShowUserForm」プロシージャを選択し、[OK]ボタンをクリックする

  5. ボタンの文字列を「住所入力フォーム」に変更し、[Enter]キーで確定する

ここまでできたら、ブックを保存して動作を確認しましょう。

いったんブックを閉じて再びブックを開くと、自動的にユーザーフォームが起動します。
このとき、ユーザーフォームの背後には住所録ファイルが開いて、編集可能な状態になっているはずです。
何件か、データを入力してみましょう。
[終了]ボタンでユーザーフォームを閉じた後は、再びワークシート上の[住所入力フォーム]ボタンからユーザーフォームを起動できることを確認しましょう。

以上で、住所入力フォームは完成です。

●補足1●

プロパティウィンドウを使用して、ユーザーフォームの「ShowModal」プロパティにFalseを設定する方法でも、モードレス表示が可能です。

●補足2●

ユーザーフォーム入門 - 住所入力フォームを作成する(3) 〜 入力順序とIMEの設定」で入力順序を設定した際、誤登録を防ぐために[登録]ボタンをタブ移動順から外しましたが、連続して登録する場合は不便に感じるかもしれません。
その場合は、TabStopプロパティをTrueに戻し、[登録]ボタンにも移動するようにしてください。