
テキストボックスの更新後処理で下記のような記述をし、
テキストボックスに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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセスでレコードの内容が変更されたかどうかを調べるには
Access(アクセス)
-
-
4
Access の SetFocus について教えてください
Access(アクセス)
-
5
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
6
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
7
AccessVBA SetFocusとGoToControlが正常に作動しない
Access(アクセス)
-
8
Accessでレコードが更新された時に発生するイベント。
その他(データベース)
-
9
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
10
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
11
新規レコード行を非表示にしたい
Access(アクセス)
-
12
テキストボックスの入力チェック(ACCESS VBA)
その他(プログラミング・Web制作)
-
13
アクセスVBAのMe!と[ ]
Access(アクセス)
-
14
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
15
Accessの「Form_AfterUpdate」イベントが実行されないんですが...
Firefox(ファイヤーフォックス)
-
16
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
17
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
18
AccessのFormの設定で、開いた時に必ず最大化で表示する方法が分からず困っています
Access(アクセス)
-
19
Access2010 SetFocusが当たらない
その他(プログラミング・Web制作)
-
20
どこにもフォーカスを当てたくない
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
Accessの更新後処理で特定の条...
-
どこにもフォーカスを当てたくない
-
油性マジックで書いたサインを...
-
ユーザーフォームのSetFocusが...
-
中古本の店名ハンコの消し方
-
ray-mmdについて
-
池袋サンシャイン通りでキャッ...
-
F503iにSVって表示されてるんで...
-
3SK22というFETはデュアルゲー...
-
GridViewでハイライトを使用し...
-
PHPで電卓を作りたい
-
炊飯器のセットの音と出来上が...
-
C# ReadOnlyのTextBoxで
-
Androidで読み込みを中止する方法
-
パソコンにいれた写真を、 また...
-
『エッジの効いた○○』の意味。
-
ページによっては、スクロール...
-
業務に差し支えのないテンキー...
-
回答投稿中にエラーが発生しま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
ユーザーフォームのSetFocusが...
-
C# ReadOnlyのTextBoxで
-
油性マジックで書いたサインを...
-
矢印(左右)キーでイベントを...
-
GridViewでハイライトを使用し...
-
エクセルVBA テキストボックス...
-
業務に差し支えのないテンキー...
-
VBAのExitイベントについて
-
Accessの更新後処理で特定の条...
-
小学校で遊ぶてんかのルールに...
-
Private Sub内でSubをCallしたい
-
コマンドボタンのEnterイベント...
-
『エッジの効いた○○』の意味。
-
プログラムからTera Termに文字...
-
MFCでコンボボックスを選択不可...
-
F503iにSVって表示されてるんで...
-
池袋サンシャイン通りでキャッ...
-
テキストボックス入力後、警告...
おすすめ情報