はじめに
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イベントで行うのが一般的。
この簡単な設定を加えるだけで、ユーザーフォームがより本格的なダイアログボックスのように振る舞い、キーボード派のユーザーにとって格段に使いやすいツールになります。ぜひ、ご自身のフォーム開発に取り入れてみてください。
