【VBA】ユーザーフォームに既定(Enter)/キャンセル(Esc)ボタンを設定する方法

目次

はじめに

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

実行前の準備

  1. ConfirmForm という名前のユーザーフォームを作成します。
  2. フォーム上に「コマンドボタン」を2つ配置します。
  3. それぞれの (Name) プロパティを OKButtonCancelButton に、Caption プロパティを OKキャンセル に変更します。
  4. フォームのコードモジュールに上記のコードを貼り付けます。
  5. フォームを表示し、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 イベントで行うのが一般的。

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次