
テキストボックスの更新後処理で下記のような記述をし、
テキストボックスに1が入力された場合、エラーメッセージを表示した上で、
フォーカスを一度ボタンに移動した後、テキストボックスに移動しております。
SetFocusを二回記述している理由ですが、
フォーカス移動を抑止する為に、Me.テキストボックス.SetFocus のみを記述した所、次の場所にフォーカスが移動してしまい、
下記のように書くと元の場所にフォーカスが戻ってくる為です。
フォーカス喪失時(Exit)の場合、Cancelを使用すればフォーカスの移動を抑止できたのですが、
更新後処理(AfterUpdate)でSetFocusを2回書く以外に
フォーカスを移動させない方法をご存知の方がいらっしゃいましたら
アドバイスいただければと思います。
★クラスモジュール
Private Sub テキストボックス_AfterUpdate()
Call CHECK_TEXT(Me, Me.テキストボックス.Value)
End Sub
★標準モジュール
Function CHECK_TEXT(MeForm As Form, text As String)
If text = 1 Then
MsgBox "エラー"
MeForm.ボタン.SetFocus
MeForm.テキストボックス.SetFocus
End If
End Function
以上、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
「更新後処理」で
と限定されると他に方法は無いと思いますが、
通常、このようなチェック処理は、「更新前処理」で行います。
Private Sub テキストボックス_BeforeUpdate(Cancel As Integer)
Cancel = CHECK_TEXT(Me.テキストボックス.Text)
End Sub
Function CHECK_TEXT(txt As String) As Boolean
If txt = 1 Then
MsgBox "エラー"
CHECK_TEXT = True
End If
End Function
ありがとうございます。
更新後処理で記述している理由ですが、エラーの場合入力値を初期化したいと思っているためです。
更新前で記述するとなると下記のような感じになると思いますが、
「"BeforeUpdate/更新前処理"プロパティまたは
このフィールドの"ValidationRule/入力規則"プロパティに設定したマクロまたは関数のために、
このフィールドのデータを保存できません。」
といわれてしまいました。
Private Sub テキストボックス_BeforeUpdate(Cancel As Integer)
Cancel = CHECK_TEXT(Me.テキストボックス.text)
If Cancel = True Then
Me.テキストボックス = ""
End If
End Sub
Function CHECK_TEXT(txt As String) As Boolean
If txt = 1 Then
MsgBox "エラー"
CHECK_TEXT = True
End If
End Function
なお更新後であれば、エラーの場合入力値を初期化できました。
Private Sub テキストボックス_AfterUpdate()
Call CHECK_TEXT(Me, Me.テキストボックス.Value)
End Sub
Function CHECK_TEXT(MeForm As Form, text As String)
If text = 1 Then
MsgBox "エラー"
MeForm.ボタン.SetFocus
MeForm.テキストボックス.SetFocus
MeForm.テキストボックス = ""
End If
End Function
ただSetFocusを2回書くのはやっぱり変かなという気がするので、
更新前でチェックをしつつ、入力欄を初期化できれば良いのですが。
以上、よろしくお願いします。
No.3
- 回答日時:
テキストボックスが連結コントロールという条件つきですが。
Private Sub テキストボックス_BeforeUpdate(Cancel As Integer)
Cancel = CHECK_TEXT(Me.テキストボックス)
End Sub
Function CHECK_TEXT(ctl As Control) As Boolean
If ctl = 1 Then
MsgBox "エラー"
ctl.Undo
CHECK_TEXT = True
End If
End Function
好みの問題もありますが、
自分は、各コントロールではチェックせず
最後にまとめてチェックするようにしています。
ユーザーさんが、テキストボックスで
身動き出来なくなる自体が起こることを避けるためです。
ありがとうございます。
今回作っているものは非連結の為そのまま使うことは出来なさそうですが、今後の参考にさせていただきます。
また最後にまとめてチェックするという組み方についても今後検討させていただこうと思います。
今回はとりあえず現状どおりSetFocus2回で回避する事にいたします。
どうもありがとうございました。
No.1
- 回答日時:
そのテキストボックスの「タブストップ」を「いいえ」に設定してもダメですか?
フォーカスの移動は、当然VBAで行うことになりますが....
ありがとうございます。
私が試してみた限りでは、駄目でした。
エラーメッセージが表示された後、次のテキストボックスに移動してしまいます。
ソースは下記となります。
・テキスト0でTABを押下すると、更新後処理で入力チェックを行うテキストボックスに移動するようにソースで記述しています。
・エラーメッセージ表示時はそのまま現在の位置にとどまってほしいのですが、
下記のソースでは質問時のソースから二つのSetFocusを削除している為、
次のテキストボックスに移動してしまいます。
★クラスモジュール
Private Sub テキスト0_Exit(Cancel As Integer)
Me.テキストボックス.SetFocus
End Sub
Private Sub テキストボックス_AfterUpdate()
Call CHECK_TEXT(Me.テキストボックス.Value)
End Sub
★標準モジュール
Function CHECK_TEXT(text As String)
If text = 1 Then
MsgBox "エラー"
End If
End Function
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームで銀行に対応した支店コードの入力ができません Sheet1のA列に銀行名、B列に銀行 5 2022/07/28 17:50
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) フレーム内のオプションボタンの選択結果をセルに書き出したい。 図のような預金種目というフレームにオプ 2 2022/07/29 11:12
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
このQ&Aを見た人はこんなQ&Aも見ています
-
Access サブフォームでの選択行の取得
その他(データベース)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
-
4
アクセスVBAのMe!と[ ]
Access(アクセス)
-
5
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
6
テキストボックスの入力チェック(ACCESS VBA)
その他(プログラミング・Web制作)
-
7
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
8
AccessVBA SetFocusとGoToControlが正常に作動しない
Access(アクセス)
-
9
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
10
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
11
アクセスでレコードの内容が変更されたかどうかを調べるには
Access(アクセス)
-
12
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
13
Access:結果は出るがエラー
その他(プログラミング・Web制作)
-
14
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
15
入力規則違反-任意のエラーメッセージの表示
Access(アクセス)
-
16
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
17
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
18
Access2010 「演算子がありません」エラー
その他(データベース)
-
19
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
20
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Suicaでの自販機購入方法を教え...
-
他の人には声だして挨拶してる...
-
油性マジックで書いたサインを...
-
feelエッジについて
-
85年に開催された神戸グリー...
-
VBAのExitイベントについて
-
炊飯器のセットの音と出来上が...
-
ページによっては、スクロール...
-
F503iにSVって表示されてるんで...
-
Accessの更新後処理で特定の条...
-
iPhone SE のCM 俺 iPhone SE ...
-
大久保駅までの道のり
-
AS3でのマウスオーバーに関...
-
画面の下に流れる文字を表示す...
-
スマホ用のモバイルバッテリー...
-
VBでタッチパネルを・・・
-
ドラゴンボールZ3
-
デュアルパソコンの作り方
-
質問失礼します I hate how med...
-
ボタンを押すと別の画像も一緒...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
エクセルVBA テキストボックス...
-
業務に差し支えのないテンキー...
-
MFCでコンボボックスを選択不可...
-
矢印(左右)キーでイベントを...
-
Accessの更新後処理で特定の条...
-
テキストボックス入力後、警告...
-
GridViewでハイライトを使用し...
-
Private Sub内でSubをCallしたい
-
油性マジックで書いたサインを...
-
コマンドボタンのEnterイベント...
-
池袋サンシャイン通りでキャッ...
-
DateTimePicker のEnable
-
プログラムからTera Termに文字...
-
マイクラのマルチサーバーが起...
-
酸素ボンベのレギュレーターか...
-
OPPO A54 5Gを使っています。 ...
おすすめ情報