教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】フォーカスがなくてもEscキーでクリックできるキャンセルボタンを作成する方法を教えて!

構文

構文は以下の通りです。

コマンドボタン名.Cancel = True

解説

コマンドボタンをキャンセルボタンにするためには、コード内でCancelプロパティをTrueに設定する必要があります。コマンドボタン名には対象となるボタンの名前を指定します。キャンセルボタンに指定すると、フォーム上でEscキーを押すと自動的に反応します。

使い方

具体的な使い方を紹介します。

Private Sub UserForm_Activate()
    ' キャンセルボタンを設定
    CommandButton1.Cancel = True
End Sub

上記は、フォームが表示されると、自動的にキャンセルボタンが設定されます。キャンセルボタンが設定されると、ユーザーがエスケープキー(Escキー)を押すことで、フォームの閉じる操作が実行されます。また、フォーム内でフォーカスがコントロールから外れた状態でEnterキーを押すと、キャンセルボタンがクリックされたとしても同じ動作が行われます。

プログラミング例

以下に、プログラミング例を幾つか紹介します。

例1: ユーザー認証フォーム

Private Sub UserForm_Activate()
    ' ログインボタンをキャンセルボタンとして設定
    CommandButton1.Cancel = True
End Sub

Private Sub CommandButton1_Click()
    ' ユーザー名とパスワードの入力をチェックし、認証を実行するコードを記述します
    ' ここでは省略します
End Sub

ユーザー認証のためのカスタムフォームを作成します。ユーザー名とパスワードを入力するテキストボックスと「ログイン」ボタンを配置します。ログインボタンの代わりにEnterキーでもログインが実行されるようにしたい場合に、このイベントハンドラを使用して、ログインボタンをキャンセルボタンとして設定します。

例2: データ入力フォーム

Private Sub UserForm_Activate()
    ' キャンセルボタンを設定
    CommandButton1.Cancel = True
End Sub

Private Sub CommandButton1_Click()
    ' データの入力を保存する処理を記述します
    ' ここでは省略します
End Sub

データの入力フォームを作成します。複数のテキストボックスを配置して、ユーザーにデータを入力してもらいます。フォームの操作を簡単にキャンセルできるようにするために、キャンセルボタンを設定します。

まとめ

コマンドボタンをキャンセルボタンにするには、Button1.Cancel = Trueを追加して、キャンセルボタンとしての動作を設定します。是非活用してください。