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

Excel-VBA ユーザーフォーム

スポンサーリンク


Excel-VBAを使って苦労して作成したエクセルファイル。

作成者の意図しない操作によってエラー表示が出ることありませんか?

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

想定外の操作!

ヘンなことしないでよって思いませんか?

ユーザーフォームでコマンドボタンやテキストボックスを駆使して配置して、入力や印刷など様々な項目を一発で目的のセルへ自動転記させるなどして仕事作業効率化の為に、頑張ったのに!

それを防ぐために、エクセルファイルを開いたら自動的に指定したユーザーフォームが表示されて、他の部分は操作できないようにしてしまえば解決します!

だからと言って、エクセルのシート(ワークシート)にあちこちにボタンを張り付けるのは面倒ですし、綺麗にできているとは思えないですよね。

そういう事でエクセルファイルを開いた時に、自動的にユーザーフォームが開くようにしてしまいましょう。
スポンサーリンク


スポンサーリンク

ThisWorkBookに書き込む

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

thisworkbook

Private Sub Workbook_Open()
UserForm1.Show
End Sub
  1. エクセルファイルを開いたら
  2. ユーザーフォーム(UserForm1)を表示する
  3. マクロ終了
波乗りアヒル
波乗りアヒル

たった3行書くだけです。

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

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

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

Private Sub Workbook_Open()
Worksheets(“sheets1”).Activate
Range(“A1”).Select
UserForm1.Show
End Sub
  1. エクセルファイルを開いたら
  2. シート(sheets1)を選ぶ
  3. セルA1を選ぶ
  4. ユーザーフォーム(UserForm1)を表示する
  5. マクロ終了

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

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

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

時々思い通りに表示されない(T_T)

初心者のオッサンの知識不足か、パソコンによって(3万円程のパソコン)が原因なのかわかりませんが、ユーザーフォームは表示されるのにシートが移動してくれないことありませんか?

または、シートはちゃんと移動して表示しているのにユーザーフォームが開かない!

こんなことが時々格安パソコンの時に起こります。

エクセルのファイルサイズは500KBほどなのでそれほど重くはないと思うのだけど?

Excel-VBAを使う前は、数式だらけで5000KBもあったから10分の1なんだけどね。

対策として、シートの数を減らしたらこのような症状はなくなったのですが・・・なぜ?

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

重たかったのかな?

すぐに動かないなら、ちょっと数秒時間を置いたら動く方法を探してみたらやっぱりありました!

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

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

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

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

Private Sub Workbook_open()
Application.OnTime Now + TimeValue(“00:00:03”), “START”
End Sub
  1. エクセルファイルを開いたら
  2. アプリケーションのOnTimeメソッドを使い、今から3秒後に「START」という名前のコード内容をを実行する
  3. マクロ終了

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

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

標準モジュール

Sub START()
Worksheets(“sheets1”).Activate
Range(“A1”).Select
UserForm1.Show
End Sub
  1. 「START」という名のプログラム実行する
  2. ワークシート(sheets1)を選ぶ
  3. セルA1を選ぶ
  4. ユーザーフォーム(UserForm1)を表示する
  5. マクロ終了

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

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?