エクセルを開くと自動的にユーザーフォームが数秒後に開く方法

Excel-VBA ユーザーフォーム

エクセル住所録などでオリジナル入力画面をユーザーフォームで作っても、そのままではエクセルワークシート上にはありません。

最初の頃は「あれ?どこに行っちゃたのかな?」って思いませんでしたか?

スポンサーリンク

ユーザーフォームを表示する

ユーザーフォームをワークシート上に表示する方法がいくつかありますので、順に書いていきます。

ワークシート上のコマンドボタンを使う

今でも念のために必ず下の図のように、ワークシート上にコマンドボタンを配置していて、クリックするとユーザーフォームが開くようにしています。

ワークシート上に【MENU】という名のボタンを配置

設定方法は簡単なので手順を書いていきます。

ワークシート上にコマンドボタンを配置する方法は、【開発】➡【挿入】の順にクリックすると、フォームコントロール(ツールボックス)が表示されます。

ボタンの配置
【開発】➡【挿入】でOK

一番左上が「ボタン」なので、これをクリックをしたらワークシート上にマウスを合わせて、左クリックしながら右斜め下へマウスを移動すると、ボタンが現れます。

ワークシート上のボタン
ボタンが現れました

マウスから手を離すと、マクロの登録画面が現れます。(標準モジュールにマクロが未登録の場合表示されないこともあります。)

登録したいマクロを選択します

そしてVBAの標準モジュールには、このようにコードを書いてあります。

ユーザーフォームを表示するVBAコード

Sub MENU()
UserForm1.Show
End Sub

VBA解説
  1. MENUという名のマクロ開始
  2. ユーザーフォーム1を表示する
  3. マクロ終了

これで完成ですが、エクセルを開いたら毎回ユーザーフォーム1を必ず開くのならば、ボタンを押さなくてもエクセル開くと同時にユーザーフォームが開いたら手間が省けて便利ですよね。

【参考】ユーザーフォームを閉じる

表示を理解したら、当然その反対のユーザーフォームを閉じる方法も抑えておきましょう。

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

Private Sub CommandButton1_Click()
Unload UserForm1
End Sub

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

ユーザーフォームを閉じるじゃなくて、閉じられなくする方法もあります。

✖ボタンを機能停止させて誤操作を回避できます。

スポンサーリンク


エクセルを開くと同時にユーザーフォームを表示する

方法が2つあり、先ほど紹介した標準モジュールに書いたVBAコードを変更する方法と、ThisWorkbookに書く方法があります。

標準モジュールを変更する

Sub Auto_Open()
UserForm1.Show
End Sub

MENUという適当に付けた名前をAuto_Openというプロシージャーを使う事でできるようになります。

では、もうひとつの方法ですが、Microsoft Visual VasicのVBA Projectの中にある、ThisWorkBookに下記のように書き込めば、エクセルファイルを開いた時に自動的にユーザーフォームが開きます。

thisworkbook
VBA画面のThisWorkbook

ThisWorkbookを開いたら、VBAコードを書きましょう。

エクセル開くと同時にユーザーフォームを表示

Private Sub Workbook_Open()
UserForm1.Show
End Sub

VBA解説
  1. エクセルファイルを開いたら
  2. ユーザーフォーム1を表示する
  3. マクロ終了

これで、エクセルファイルを開いたらユーザーフォーム(UserForm1)が表示されます。

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

このままだと、表示するシート(ワークシート)もセル番号もが指定されていない為に、前回保存した場所が開いてしまうので、毎回違ったシートが開いてちょっと不便。

シートやセルも一緒に指定してしまえば、毎回必ず同じ部分が表示されますので、一緒にコードを書いておくことをお勧めします。

シート・セル番号も一緒に指定する

Private Sub Workbook_Open()
Worksheets(“sheets1”).Activate
Range(“A1”).Select
UserForm1.Show
End Sub

VBA解説
  1. エクセルファイルを開いたら
  2. シート(sheets1)を選ぶ
  3. セルA1を選ぶ
  4. ユーザーフォーム(UserForm1)を表示する
  5. マクロ終了

これでエクセルファイルを開くと必ずシートはsheets1のセルA1を選んでからユーザーフォーム(UserForm1)が開くようになります。

ちなみにシート名やセル、ユーザーフォームを変更すれば、お好みの場所とユーザーフォームを開くことができます。

セルの値を読み込んでからユーザーフォームを開く

セルの値を読み込んでユーザーフォーム表示

エクセル住所録で使っているメインメニューが必ず表示されますが、表示する時に今日の日付を読み込んでからユーザーフォームが開くようにしています。

この設定をしないと、日付が”Label11、テキストボックスはそれぞれ空欄という状態になってしまいます。

セルの値を読み込んで表示

Private Sub Workbook_Open()
Sheets(“HOME”).Range(“A1”).Select
UserForm1.Label1.Caption = Range(“P2”).Value
UserForm1.TextBox1.Value = Range(“S2”).Value
UserForm1.TextBox2.Value = Range(“T2”).Value
UserForm1.Show
End Sub

このようにUserForm1.Showの前に値を読み込む手順を書いて行けば簡単にできるようになります。

また、この方法以外にもInitializeを使う方法もありますので、こちらもご覧ください。

OnTimeメソッドで数秒後に起動

このOnTimeメソッドを使うと、任意の指定した日時や特定の経過時間後に作業を実行するっていうコードです。

これを使って、エクセルを開いたら2秒後や3秒後にユーザーフォームを表示するって指示を書いたらうまくいかないか試してみたら、見事にスムーズに動くようになりました。

まず、先ほどと同じようにThisWorkBookに書きます。

タイマー機能で数秒後に表示する

Private Sub Workbook_open()
Application.OnTime Now + TimeValue(“00:00:03”), “START”
End Sub

VBA解説
  1. エクセルファイルを開いたら
  2. アプリケーションのOnTimeメソッドを使い、今から3秒後に「START」という名前のコード内容をを実行する
  3. マクロ終了

次に、標準モジュールに実際に動かすコードを書きます。

ちなみに標準モジュールの追加方法は、Microsoft Visual VasicのVBA Projectの中にある、挿入から標準モジュールを選べば追加されます。

標準モジュール
STARTという名のプRグラム内容

Sub START()
Worksheets(“sheets1”).Activate
Range(“A1”).Select
UserForm1.Show
End Sub

VBA解説
  1. 「START」という名のプログラム実行する
  2. ワークシート(sheets1)を選ぶ
  3. セルA1を選ぶ
  4. ユーザーフォーム(UserForm1)を表示する
  5. マクロ終了

この2つがセットになって3秒後に指定したシートとセルとユーザーフォームが動くようになります。

スポンサーリンク

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

ユーザーフォームを複数作ったら自由に表示させたくなりませんか?

例えば、このような流れです。

1、エクセル住所録ファイルを開くとメニューフォームを表示

エクセル住所録メインメニュー
エクセル開くと自動表示

2、登録・修正ボタンを押すと住所録フォームに表示が切り替わる

住所録入力フォーム
切り替わって表示

このような使い方ってよくあると思いますので、VBAコードも簡単なので書いてみました。

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

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

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