MENU

Excel Vbaユーザーフォームが面白い

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

この記事を書いた人

コメント

コメントする

目次
閉じる