テキストボックスの更新後処理で下記のような記述をし、
テキストボックスに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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
Access:結果は出るがエラー
その他(プログラミング・Web制作)
-
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
-
4
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
5
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
6
新規レコード行を非表示にしたい
Access(アクセス)
-
7
Access サブフォームでの選択行の取得
その他(データベース)
-
8
アクセスVBAのMe!と[ ]
Access(アクセス)
-
9
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
10
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
11
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
12
【Access】テキストボックスに入力後、そのテキストボックスを無効化する方法について
その他(Microsoft Office)
-
13
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
14
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
15
Access2010 「演算子がありません」エラー
その他(データベース)
-
16
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
17
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
18
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
19
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
20
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
油性マジックで書いたサインを...
-
Accessの更新後処理で特定の条...
-
フォーカスを移動させない方法
-
テキストボックス入力後、警告...
-
他の人には声だして挨拶してる...
-
酸素ボンベのレギュレーターか...
-
ユーザーフォームのSetFocusが...
-
『エッジの効いた○○』の意味。
-
VBAのExitイベントについて
-
VC++2010のラジオボタンの選択...
-
DateTimePicker のEnable
-
矢印(左右)キーでイベントを...
-
VB.NET ボタン押下で一つ前の...
-
フォーカスを奪わない
-
大きめなインパクトのあるフラ...
-
コマンドボタンのEnterイベント...
-
マイクラのマルチサーバーが起...
-
SetFocusについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
矢印(左右)キーでイベントを...
-
ユーザーフォームのSetFocusが...
-
エクセルVBA テキストボックス...
-
業務に差し支えのないテンキー...
-
コマンドボタンのEnterイベント...
-
GridViewでハイライトを使用し...
-
テキストボックス入力後、警告...
-
油性マジックで書いたサインを...
-
Accessの更新後処理で特定の条...
-
VBAのExitイベントについて
-
中古本の店名ハンコの消し方
-
F503iにSVって表示されてるんで...
-
OPPO A54 5Gを使っています。 ...
-
VC++2010のラジオボタンの選択...
-
VB.NET ボタン押下で一つ前の...
-
油性マジックの消し方
-
炊飯器のセットの音と出来上が...
おすすめ情報