Excelマクロでユーザーフレンドリーなフォームを表示!
前回まで、VBA(マクロ)について下記の記事を投稿してきました。
・Excel で マクロ(VBA)を書く
・Excelマクロで変数を使って計算する
・Excelマクロで変数をシートに保存する
今回は、ユーザーフォームの表示の仕方について説明します。
いままでとは違い、ユーザーフォームでは自由にフォーム画面を作成できます。
ユーザーフォームを作成する
業務アプリを作るには、いろいろなフォーム画面を開いたり閉じたりする必要があります。ここではフォーム画面の作り方について説明をします。
[新規]ブックを開いてください。
[開発]タブの[Visual Basic]を押して、VBE画面に切り替えます。
[挿入]の[ユーザーフォーム]を押してください。
ユーザーフォームが、挿入されます。
ユーザーフォームの名前は、[UserForm1]になっています。
[挿入]-[標準モジュール]を押して、マクロを書く領域(標準モジュール)を作成します。
標準モジュール(Module1)が、できたら[Sub フォーム1表示]と入力して[Enter]を押してください。
[フォーム1表示]というマクロを記述します。
Sub フォーム1表示()
UserForm1.Show
End Sub
マクロには下記のように書きます。
UserForm1.Show
マクロを実行します。
マクロを実行すると UserForm1 が表示されます。
ユーザーフォームをデザインする
表示した UserForm1 は、閉じてください。
[ツールボックス]アイコンを押してください。
[ツールボックス]ウィンドウが表示されます。
ラベルを挿入する
ツールボックスの[ラベル]アイコンをクリックして、フォームをクリックするとラベルができます。
左下の[Caption]プロパティを[ユーザーフォーム(1)]に編集します。
マクロを実行すると
ラベルを追加した UserForm1 が、表示されます。
コマンドボタンを挿入する
ツールボックスの[コマンドボタン]アイコンをクリックして、[コマンドボタン]を挿入します。
左下の[Caption]プロパティを[フォーム(2)を表示]に編集します。
ユーザーフォーム2を追加する
[挿入]ー[ユーザーフォーム]と押して UserForm2 を挿入します。
ツールボックスを表示してください。
UserForm1 の時と同様に、ラベルを挿入します。
ラベルの Cpaption プロパティを[ユーザーフォーム(2)]に変更します。
ボタンを押してフォーム2を表示する
UserForm1 のコマンドボタンを押すと UserForm2 が表示されるように設定します。
プロジェクトエクスプローラーの UserForm1 をダブルクリックして、UserForm1 を表示します。
コマンドボタン[フォーム(2)を表示]をダブルクリックしてください。
CommandButton1_Click のマクロモジュールができます。
ここに UserForm2 を表示する命令を書きます。
UserForm2.SHow と書いてください。
Private Sub CommandButton1_Click()
UserForm2.Show
End Sub
マクロを実行して、 UserForm1 を表示してください。
UserForm1 が表示されたら、[フォーム(2)を表示]ボタンを押します。
UserForm2 が、表示されると思います。
UserForm2 をずらすと UserForm1 も、表示されたままだということがわかります。
UserForm1 を閉じようとしても、UserForm2 を閉じなければ UserFrom1 は閉じれないことを確認してください。
UserForm1 が閉じれないのは、[ShowModal]プロパティが[True]に設定されているからです。
UserForm1 を表示して、[ShowModal]プロパティを[False]に設定してみてください。
プロジェクトエクスプローラーの UserForm1 をクリックして、上の[オブジェクトの表示]を押してください。
フォームが表示されたら、左下の[ShowModal]プロパティを[False]にします。
UserForm1 と UserForm2 を表示して、UserForm1 の[×]を押すと、UserForm1 が閉じられると思います。
[ShowModal]プロパティは、フォームを閉じることなく他の処理を実行する設定です。フォーム処理では大変重要な要素になりますので、逐次説明いたします。
[コミュニティのご案内]
ExcelやAccessで困ったときは、コミュニティでお問い合わせください。
Excelを業務で使うコミュニティ(Discord)