PR

【VBA】Enter/Escキーで処理を実行する(ユーザーフォーム)

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
VBAでよく扱うユーザーフォームで、起動時やキャンセル時のボタン処理を通常はマウスなどでクリックして行っていると思いますが、頻度が多くなってくるとボタン位置までカーソルを動かす動作そのものが煩わしくなることもあるので、今回はEnterやEscキーなどを使ってボタンクリックと同様の動作をさせる方法をトグルボタンやフォーカスなども交えながら書いていきます。

スポンサーリンク

1.サンプル概要

サンプルとして画像に示すユーザーフォームを準備しています。

コマンドボタン1を「既定」として設定しており、「Enter」キーを押すことでCommandButton1をクリックした時と同様の動作を行います。サンプルではEnterキーを押すとテキストボックスに[Enter]key pressed.と表示します。

コマンドボタン2はキャンセルボタンとして設定し、Escキーを入力することでCommandButton2をクリックした時と同様の処理としています。サンプルではEscキーを押すとテキストボックスに[Esc]key pressed.と表示します。

上の画像の通り、通常ではEscキー押す=キャンセルボタンなのでコマンドボタン2にフォーカスが移ります。この状態でEnterキーを押すとフォーカスのあるコマンドボタン2を押してしまうので、それを避ける為の例としてトグルボタンのON/OFFでフォーカス移動有無を選択できる形としています。

トグルボタンを押すと「 ON 」表示に変わり、「Esc」キーやコマンドボタン2のクリックでもフォーカスは常にコマンドボタン1に戻ります。

再度トグルボタンを押すと表示は「 OFF 」に変わり、フォーカス自体の制限はなくなりますので初期状態に戻ります。

これらの内容について以下に書いていきます。

2.サンプル構成

◆ユーザーフォーム構成

サンプルの構成としては以下画像の通りで、UserForm1上にToggleButton1/TextBox1/CommandButton1/CommandButton2を配置しています。

◆サンプルコード

◆Enter/Escキーで処理を実行

Private Sub UserForm_Initialize()
  'Me=このユーザーフォームに対する処理
  With Me
    'コマンドボタン1をデフォルト(既定)のボタンに設定
    .CommandButton1.Default = True
    'コマンドボタン2をキャンセルボタンに設定
    .CommandButton2.Cancel = True
  End With

End Sub

先ずはコマンドボタン1とコマンドボタン2にEnter/Escキーで実行できるようDefaultプロパティ/Cancelプロパティを使用して設定していきます。

構文:オブジェクト.Default/Cancel = True or False

DefaultプロパティはTrue設定したコマンドボタンを「既定」として設定するもので、他のコントロールにフォーカスがなければ「Enter」キーでそのコマンドボタンをクリックした時と同様の動作を行うことができます。

また、CancelプロパティにTrueを設定したコマンドボタンは「キャンセルボタン」となります。この場合はコマンドボタンにフォーカスがなくてもEscキーで実行することが可能です。

◆トグルボタンによる処理

Private Sub ToggleButton1_Change()
'トグルボタンが変化した際の処理

  With ToggleButton1
    'トグルボタンの状態に応じて分岐処理
    Select Case .Value
       Case True
         'トグルボタンがON=Trueで
         'ボタン上のCaptionを「 ON 」
         .Caption = "「 ON 」"
       Case False
         'トグルボタンがOFF=Falseで
         'ボタン上のCaptionを「 OFF 」
         .Caption = "「 OFF 」"
    End Select
  End With

End Sub

Private Sub ToggleButton1_Change()はトグルボタンが変更された際に処理を実行するものになります。

ここではValueプロパティを利用してトグルボタンの状態を取得します。

ToggleButton1.Value = True or False

トグルボタンがくぼんだ状態がONでTrueとなり、OFFでFalseとなりますので、その状態にあわせてキャプションを変更していますので、True⇒Caption =”「 ON 」”、False⇒Caption = ” 「 OFF 」”としています。

◆コマンドボタン動作

Private Sub CommandButton1_Click()
 
  '「Enter」キーが押された場合、または
  'コマンドボタン1がクリックされた際の処理
  TextBox1.Text = "[Enter]key pressed."

End Sub

 

Private Sub CommandButton2_Click()

  '「ESC」キーが押された場合、または
  'コマンドボタン2がクリックされた際の処理
  TextBox1.Text = "[ESC]key pressed."
  
  '**追記**
  'ESCキー入力によるキャンセルは対象のコマンドボタンに
  'フォーカスがなくても実行可能
  '(実行時にキャンセルボタンへフォーカスが移動)
  '******

  'トグルボタンがON⇒フォーカスを常にボタン1とする
  'トグルボタンがOFF⇒フォーカスを特に制限しない
  If ToggleButton1.Value = True Then _
  Me.CommandButton1.SetFocus

End Sub

CommandButton1は「Enter」キー入力、またはボタンクリックした際のTextBox1への表示のみになります。

CommandButton2については「Esc」キー入力、またはボタンクリックにてTextBox1へ表示しますが、ここでToggleButton1のON/OFFによるフォーカス移動有無の判定も行っています。

If ToggleButton1.Value = True Then Me.CommandButton1.SetFocus

ToggleButton1がTrue(ON)であればフォーカスをCommandButton1に移すので、Enterキーを押すことで動作させたいボタンが常に選択された状態としています。

3.まとめ

データ収集や集計などを目的にユーザーフォームで作成することは多いのですが、繰り返す回数が多いとマウスでカーソルを合わせるだけでも煩わしく感じますから、サンプルのような形でキー入力を利用することも良いかと思います。



今回は使用したトグルボタンを併用するとスイッチ的な役割を果たしてくれますので使い勝手も変わりますから、機会があれば活用などを検討されてみるのも良いと思います。

以上、Enter/Escキーで処理を実行する(ユーザーフォーム)方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました