ユーザーフォームを自動で表示する3つの方法

Excel VBA ユーザーフォーム

ユーザーフォームを自動で表示するとき、どのようなタイミングで表示するのがパソコンで入力する担当者にとって適切なのか以前考えたことがあったので、ここに書き留めておきたいと思います。

Excelブックを開いたときに自動でユーザーフォームを表示する

(Workbook_Openを使う方法)

先ずは、簡単なユーザーフォームを作成します、エクセルの「開発」タブ →「Visual Basic」でVBE(Visual Basic Editor)の画面を表示して「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

VBAProjectの「ThisWorkbook」をダブルクリックしてThisWorkbookのコードウィンドウを表示し、次のコードをコピーして貼り付けます。

Private Sub Workbook_Open()

MsgBox "ユーザーフォームを表示します。"
UserForm1.Show

End Sub

続いて、エクセルのシート1を表示して「ファイル」タブ →「名前を付けて保存」で「フォーム表示.xlsm」という名前でファイルを保存してからエクセルを閉じ、再び「フォーム表示.xlsm」を開くとユーザーフォームが表示されます。

ポイント

マクロを含むファイルは「名前を付けて保存」するときファイルの種類を「Excel マクロ有効ブック(*.xlsm)」で保存します。

Excelブックを開いたときに自動でユーザーフォームを表示する

(Auto_Openを使う方法)

先ほどThisWorkbookに貼り付けた「Workbook_Open」のコードは削除しておきます。

VBEの「挿入」メニュー →「標準モジュール」で標準モジュールを作成します。

「Module1」をダブルクリックして次のコードをコピーして貼り付けます。

Sub Auto_Open()

MsgBox "ユーザーフォームを表示します。"
UserForm1.Show

End Sub

続いて、エクセルのシート1を表示して「ファイル」タブ →「上書き保存」で「フォーム表示.xlsm」を保存してからエクセルを閉じ、再び「フォーム表示.xlsm」を開くとユーザーフォームが表示されます。

Excelブックがアクティブなった時に自動でユーザーフォームを表示する

(Workbook_Activateを使う方法)

先ずは「フォーム表示.xlsm」とは別に、もう一つエクセルファイルを開いておきます。

VBAProject (フォーム表示.xlsm) の「ThisWorkbook」をダブルクリックしてThisWorkbookのコードウィンドウを表示し、次のコードをコピーして貼り付けます。

Private Sub Workbook_Activate()                                          'ワークブックがアクティブになったときの処理

MsgBox "ユーザーフォームを表示します。"
UserForm1.Show vbModeless

End Sub

Private Sub Workbook_Deactivate() 'ワークブックが非アクティブになったときの処理

If UserForm1.Visible = True Then 'ユーザーフォームが表示されているときの処理

MsgBox "ユーザーフォームを閉じます。"
Unload UserForm1

End If

End Sub

Workbook_Activateイベントを使うと、イベントを書いたワークブックが選択されてアクティブになったたときにユーザーフォームを表示することができます。

ポイント

ユーザーフォームを「UserForm1.Show」で表示した場合、ワークブックが非アクティブになったとき自動でユーザーフォームを閉じることができないので、上のコードでは「UserForm1.Show vbModeless」でユーザーフォームを表示するようにしています。

エクセルの画面下にあるタスクバーのエクセルのアイコンにマウスポインターを持っていき、表示された「フォーム表示.xlsm」をクリックします。

「フォーム表示.xlsm」がアクティブになってユーザーフォームが表示されます。

以上がユーザーフォームを自動で表示する3つの方法です、1つのエクセルファイルだけでユーザーフォームを使った作業をするときは「Workbook_Open」や「Auto_Open」を使い、複数のエクセルファイルを切り替えて使いたいときは「Workbook_Activate」を使うのが良いかと思います。( ˘ᵕ˘ )♪

コメント