はじめに
Windowsの一般的なダイアログボックスでは、Enter
キーを押すと「OK」ボタンが、Esc
キーを押すと「キャンセル」ボタンがクリックされたのと同じ動作をしますよね。これはユーザーにとって直感的で、キーボード操作の効率を大きく向上させます。
VBAのユーザーフォームでも、コマンドボタンの .Default
プロパティと .Cancel
プロパティを設定することで、この便利な機能を簡単に実装できます。
この記事では、ユーザーフォーム上の特定のボタンを、Enter
キーとEsc
キーにそれぞれ対応させる方法を分かりやすく解説します。
既定/キャンセルボタンを設定するVBAサンプルコード
ボタンの .Default
と .Cancel
プロパティは、通常、フォームが表示される直前の UserForm_Initialize
イベント内で設定します。
この例では、ConfirmForm
というフォームに配置された OKButton
を既定のボタンに、CancelButton
をキャンセルボタンに設定します。
ユーザーフォームのコード
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
' --- OKButtonを「既定のボタン」に設定 ---
' これにより、フォーム上でEnterキーを押すと、このボタンがクリックされる
Me.OKButton.Default = True
' --- CancelButtonを「キャンセルボタン」に設定 ---
' これにより、フォーム上でEscキーを押すと、このボタンがクリックされる
Me.CancelButton.Cancel = True
End Sub
' 「OK」ボタンがクリックされたときの処理
Private Sub OKButton_Click()
MsgBox "「OK」が選択されました。"
Unload Me
End Sub
' 「キャンセル」ボタンがクリックされたときの処理
Private Sub CancelButton_Click()
MsgBox "「キャンセル」が選択されました。"
Unload Me
End Sub
実行前の準備
ConfirmForm
という名前のユーザーフォームを作成します。- フォーム上に「コマンドボタン」を2つ配置します。
- それぞれの
(Name)
プロパティをOKButton
とCancelButton
に、Caption
プロパティをOK
とキャンセル
に変更します。 - フォームのコードモジュールに上記のコードを貼り付けます。
- フォームを表示し、
Enter
キーやEsc
キーを押すと、それぞれのメッセージボックスが表示されることを確認できます。
コードの解説
Me.OKButton.Default = True
コマンドボタンの .Default
プロパティを True
に設定すると、そのボタンが「既定のボタン(デフォルトボタン)」になります。
- フォームがアクティブな状態で
Enter
キーが押されると、このボタンの_Click()
イベントが実行されます。 - 通常、フォーム内で最も実行される可能性の高い「OK」や「実行」といったボタンに設定します。
- 1つのフォームにつき、
.Default = True
にできるボタンは1つだけです。別のボタンをTrue
にすると、前に設定したものは自動的にFalse
になります。
Me.CancelButton.Cancel = True
コマンドボタンの .Cancel
プロパティを True
に設定すると、そのボタンが「キャンセルボタン」になります。
- フォームがアクティブな状態で
Esc
キーが押されると、このボタンの_Click()
イベントが実行されます。 - 通常、処理を中断する「キャンセル」や「閉じる」といったボタンに設定します。
.Default
プロパティと同様に、1つのフォームにつき、.Cancel = True
にできるボタンも1つだけです。
まとめ
今回は、ユーザーフォームの操作性を向上させる .Default
と .Cancel
プロパティについて解説しました。
.Default = True
:Enter
キーに対応するボタンを設定する。.Cancel = True
:Esc
キーに対応するボタンを設定する。- これらの設定は
UserForm_Initialize
イベントで行うのが一般的。
この簡単な設定を加えるだけで、ユーザーフォームがより本格的なダイアログボックスのように振る舞い、キーボード派のユーザーにとって格段に使いやすいツールになります。ぜひ、ご自身のフォーム開発に取り入れてみてください。