Excel Vbaでユーザーフォームについて調べてみると、本当に面白い機能が満載です。いくつか見てみたいと思います。
ユーザーフォームを表示するときは、標準モジュールに、次のコードを入力、保存します。
Sub sample1()
UserForm1.Show vbModeless
End Sub
UserForm1.Show の次の”vbModeless”はユーザーフォームが表示されている間、セルへの入力などの作業ができるようにすることで、” vbModal”とすればこれができなくなります。
ユーザーフォームが表示されるときには、Initializeが発行されます。ここでは、リストボックスやコンボボックスの初期値をセットします。こんな感じです。
Private Sub UserForm_Initialize()
TextBox1.Text = "製品番号"
TextBox2.Text = "個数"
End Sub
ユーザーフォームを閉じるときにはUnloadステートメントを使用して”Unload Me”としますが、通常はコマンドボタンと組み合わせて次のようにします。
Private Sub CommandButton2_Click()
Dim myBtm As Integer
myBtm = MsgBox("閉じちゃっていいかな?", vbQuestion + vbOKCancel)
If myBtm = vbOK Then
Unload Me
End If
End Sub
ユーザーフォームを閉じるときはQueryCloseイベントが発生します。このイベントでは、戻り値として次のものが返されます。
定数 | 値 | 内容 |
vbFormControlMenu | 0 | ユーザーが UserForm 上のコントロール メニューで [閉じる] コマンドを選択しました。 |
vbFormCode | 1 | コードから Unload ステートメントが呼び出されました。 |
vbAppWindows | 2 | 現在の Windows オペレーティング環境セッションが終了しようとしています。 |
vbAppTaskManager | 3 | Windows のタスク マネージャーがアプリケーションを閉じます。 |
このため、コマンドボタンはvbFormCode、×をクリックはvbFormControlMenuが返されます。そこでXを使えないようにするためには次にようにします。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Xでは閉じないでね"
Cancel = True
End If
End Sub
コメント