#617 | 更新前処理キャンセル時にテキスト全体を範囲選択するには? | フォーム、VBA | |
テキストボックスのデータの更新時にその内容をチェックし、もし指定条件に反する場合に更新させないようにするには、「BeforeUpdate/更新前処理」イベントプロシージャを利用します。 このイベントプロシージャ内で入力データをチェックし、もし更新をキャンセルしたい場合には、イベントプロシージャの引数である「Cancel」に”True”を代入することで、Enterキーなどを押しても次のコントロールにフォーカスが移動しないようにすることができます。 その一例が次のようなコードです。ここではテキストボックス「テキスト0」の値が数値かどうかを「IsNumeric」関数でチェックし、数値でないときは警告メッセージを表示し、更新をキャンセルしています。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) If Not IsNumeric(Me!テキスト0) Then Beep MsgBox "数値を入力してください!", vbOKOnly + vbExclamation Cancel = True End If End Sub 上記の処理においては、その特性として「Cancel = True」でプロシージャを抜けたあと、テキストボックス内のカーソルは末尾など特定の位置にくるようになっています。そのため、1文字ずつ修正する場合はよいのですが、先頭からあらためて再入力したいような場合には、カーソルを移動させるなどのユーザー操作が必要となります。 そこで、次のようにプログラムを変更することで、キャンセル時にテキスト全体を範囲選択した状態にすることができます。それによってDELETEキーでまとめて全文字を削除したり、1文字目から再入力することができるようになります(全体が範囲選択された状態で1文字キーインするとそれまでの入力値がクリアされその1文字だけ入力された状態になります)。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) If Not IsNumeric(Me!テキスト0) Then Beep MsgBox "数値を入力してください!", vbOKOnly + vbExclamation With Me!テキスト0 .SelStart = 0 .SelLength = Len(.Value) End With Cancel = True End If End Sub なおここでは、テキストボックスの「SelStart」プロパティに「0」を代入することによってカーソル位置を先頭にしています。また「SelLength」プロパティにその入力文字数を指定することによって入力値分の長さ全体を範囲選択するようにしています。 実行結果: |
|||
|
Copyright © T'sWare All rights reserved |