ユーザーフォーム(UserForm1と2)を自動切り替えをする方法

exce-vbaユーザーフォーム

エクセルのオリジナル入力フォームが作ることができるユーザーフォーム。

自由にレイアウトができるので、ひとつではなく複数作成して使用するの事も多くなりますので、場合によっては、使用しているユーザーフォームを閉じて別のユーザーフォームを開く事作業を自動化したいと思いませんか?

わざわざ、閉じるボタンや開くボタンを配置するのは、フォーム自体にボタンが増えすぎたりして見栄えが良くないし、使用する時もクリック数が増えて手間になりますのでプログラムを実行させたコマンドボタンに付け加えてエクセル自動化しましょう。

スポンサーリンク

たった2行、22文字でフォーム切替完了できる

ユーザーフォームを開くにはShowメソッドを使うので、UserForm1に配置したコマンドボタンを押してUserForm2を開くに時は下記のようなVBAコードを記述します。

ユーザーフォームを開くVBAコード

Private Sub CommandButton1_Click()
UserForm2.Show
End Sub

開きたいユーザーフォーム名に「.Show」と1行14文字VBAコードを書けば完成です。

次に閉じるVBAコードを記述します。

ユーザーフォームを閉じるVBAコード

Private Sub CommandButton2_Click()
Unload Me
End Sub

閉じたる時は「Unload Me」と1行8文字(スペース別)VBAコードを書けば完成です。

もちろん「Me」ではなく、正確に「UserForm2」と書いても同じです。

という事で、1つのコマンドボタンで開く・閉じるのユーザーフォームの切り替えをするならば、2つを合わせて2行22文字という事ですが、このまま開く・閉じるの順番にVBAコードを書くと・・・

実行時エラー400
順番を間違うとエラーになる

冷静に考えれば当たり前ですよね、今開いているフォーム(UserForm1)とこれから開くフォーム(UserForm2)2つにダブってしまうのでエラーになります。

ユーザーフォームを切り替えるVBAコード

Private Sub CommandButton1_Click()
Unload Me
UserForm2.Show
End Sub

そうです、まず開いているフォームを閉じてから、次にUserForm2を開けば何の問題も起きません。

様々なプログラムを記述して、最後にEnd Subの直前に2行22文字を付け足してフォーム切替を簡単にできるようになります。

ついでに、UserForm2を開く時にLabelやコマンドボタンの文字(キャプション)を書き換えてから、UserForm2を開くことができれば、更に手間が省けてエクセル作業効率化できるのご存知でしたか?

そして読み取って開いたら必ず特定のテキストボックスにカーソルが合わせておいて、すぐに入力できる準備もしておきませんか?

準備ができたら、次はEnterキーを押したらカーソルが移動する順番も設定しておきましょう。

こうしてマウスで操作する回数を減らして、更にエクセル作業効率化アップですね。