ユーザーフォームを閉じて別のユーザーフォームを開く方法

パソコン難しいExcel-VBA

ユーザーフォームをいくつか作って使い分ける事ってよくありませんか?

そして苦労して作ったユーザーフォームは、設定をしなければエクセルのワークシートに表示させることはできなくて困ったことありませんか?

波乗りアヒル
波乗りアヒル

作成したユーザーフォームを開くには2つ方法があります。

  1. エクセルを開いた時に自動的にユーザーフォームを表示させる
  2. コマンドボタンを配置してVBAコードを記述してフォームを開く
スポンサーリンク

ユーザーフォームの表示について

エクセルを開いた時に自動表示させる方法

私自身はこの方法を必ず使用することにより、他のスタッフが使用しても予想外の操作をされない為に、自動的にフォームを表示させて、これ以外操作できないようにしてエラーを防いでいます。

ここでは説明が重複するので省略します。

それではまず始めにユーザーフォームの基本「表示」「閉じる」から始めましょう。

ユーザーフォームを開く

コマンドボタン1を押したらユーザーフォーム1が開くようにするにば、下記のように記述します。

VBAコード

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1を表示する
  3. マクロ終了

ユーザーフォームを閉じる

ユーザーフォームを閉じるには、ユーザーフォーム自体の右上の「✖」ボタンを押すか、「コマンドボタン」にユーザーフォームを閉じるVBAコードを記述します。

まずは、コマンドボタンにVBAコードを記述する方法です。

VBAコード

Private Sub CommandButton1_Click()
Unload UserForm1
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1を閉じる
  3. マクロ終了

そしてもうひとつのユーザーフォーム自体の右上の「✖」ボタンですが、この方法おススメしません。

意図しない操作によるエラー防止の為に

「✖」ボタンを押されてしまうとユーザーフォームが閉じてしまい、次の操作ができなくなる恐れがあるので、「✖」ボタンを使用不可に設定することができます。

これにより、「コマンドボタンに」VBAコードを記述してフォームの切り替えができるようにします。

ユーザーフォームの切り替え

小難しそうにユーザーフォームの切り替えを書きましたが、実は単純に「表示」と「閉じる」を続けてVBAコードを記載するだけなんです。

ユーザーフォーム1を閉じてユーザーフォーム2を表示する場合は下記のようにVBAコードを書けば完成です。

VBAコード

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

解説
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1を閉じる
  3. ユーザーフォーム2を表示する
  4. マクロ終了

たったこれだけでユーザーフォームの切り替えが完了します。

スポンサーリンク

【応用】今日の日付を取得してからフォームを開く

ユーザーフォームの切り替えができるようになると、セルの値を取得してからユーザーフォームを開くようにできないものかと思いませんか?

実は簡単で、「閉じる」と「開く」の間に「セルの値を取得してから」という内容を書き加えればできるんですよ!

例えば、セルA1に今日の日付が数式「=TODAY()」で自動的に取得している時に、ユーザーフォーム1を閉じて今日の日付をユーザーフォーム2のラベル1に取得してから、ユーザーフォーム2を表示するようにします。

VBAコード

Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub

見出し
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1を閉じる
  3. ユーザーフォーム2に配置されたラベル名をセルA1の値とする
  4. ユーザーフォーム2を表示する
  5. マクロ終了

このように3行目にラベル以外にもテキストボックスにも同様に複数の取得したいセルの値があれば、その数の分だけ記述すればセルの値を取得してから、ユーザーフォームを開くことができるようになります。

Excel-VBAもくじへ

コメント