
単票フォームに非連結のテキストボックス「Tx_テキストA」と「Tx_テキストB」があり、
Tx_テキストA には「1~10の数値」という条件があるとします。
Tx_テキストAに数値を入力した後、更新後処理イベントで数値をチェックし、
範囲外であればその旨のメッセージを出力してTx_テキストAをクリア。
カーソルをTx_テキストAのままにして再度入力してもらう、という処理を
したいと思っています。
Tx_テキストAの更新後処理イベントに以下のコードを書いたのですが、
メッセージボックスを閉じるとTx_テキストAはクリアされるものの、
カーソルがTx_テキストBに移動してしまいます。
「Me.Tx_テキストA.SetFocus」を if文の外に出しても同様なのですが、
カーソルをTx_テキストAにするにはどうしたらよいのでしょうか?
ちなみにタブオーダーは
Tx_テキストA
Tx_テキストB
となっています。
よろしくお願いいたします。
Private Sub Tx_テキストA_AfterUpdate()
If Me.Tx_テキストA < 1 Or Me.Tx_テキストA > 10 Then
MsgBox "1~10の数字を入力"
Me.Tx_テキストA = Null
Me.Tx_テキストA.SetFocus
End If
End Sub
No.4ベストアンサー
- 回答日時:
No.1です。
更新前処理と更新後処理ではタイミングの問題だけじゃなくて色々違いがありますので、同じコードが使えるとは限りません。
こういうやり方でも可能です。
簡単に書きますので、環境に合わせて書き直してください。
If 条件 Then
MsgBox ""
A.SelStart = 0
A.SelLength = Len(A)
SendKeys "{BS}"
Cancel = True
End If
入力された文字を全選択状態にし、BackSpaceで消しています。
再度の回答ありがとうございます。
イベントによって使えるコードと、使えないコードもあるのですね。
考えてみたら、更新前の処理でそのコントロールを更新しようとしているわけですから、矛盾していましたよね。。。
A.SelStart = 0
A.SelLength = Len(A)
ここまでは調べて見つけたのですが、全体が選択状態になっているので「中身を消すという動作は不要だからいいかな。。。」と思っていました。
バックスペースで消すという方法もあったのですね!
とても参考になりました!
ありがとうございました。
No.5
- 回答日時:
こんにちは。
簡単な入力チェックなら Exit イベントがいいかもですね。
Cancel = True にして Exit をキャンセルできますし。
あと、
Null として間違った値を消してしまうのが良いか?
何が間違ったのか理由をMsgBoxで表示し、全選択状態で残すのが良いか?
ユーザビリティーの問題ですけど、大体後者のパターンが多いと思います。
これは余談でした。
Private Sub Tx_テキストA_Exit(Cancel As Integer)
Dim n As Long
n = Val(Tx_テキストA.Text)
If n >= 1 And n <= 10 Then '<---以上、以下は大丈夫ですか?
'OK
Else
'NG
MsgBox "1~10までで再入力"
Tx_テキストA.SelStart = 0
Tx_テキストA.SelLength = Len(Tx_テキストA.Text)
Cancel = True
End If
End Sub
回答ありがとうございます。
>Null として間違った値を消してしまうのが良いか?
>何が間違ったのか理由をMsgBoxで表示し、全選択状態で残すのが良いか?
これ、目からうろこが落ちる状態でした!!!
入力している人からすれば自分の入力値の何が間違っていたのか・・・
残しておいた方が良いように思いました。
アドバイスいただいた「Exit イベント」での記述ですが、試してみるとTx_テキストAにカーソルが移った後、正しい値を入力しない限り別のコントロールに移動できないのですね。
実際に作っているAccessDBでは、このコントロールは必須項目なので必須項目チェックをしないで済みそうです。
ただ、このコントロールにカーソルが行ってしまうと、別の項目を先に入力することができないので、Exit イベント が良いのか BeforeUpdate イベントが良いのか・・・・
使い勝手を考慮してもう少し考えてみます。
良いアドバイスをいただき、大変ありがとうございました!
No.3
- 回答日時:
setfocus の後に、
cancel=true
をいれると、イベントがキャンセルされるんだったっけか?
再度の回答ありがとうございます。
cancel=true
これ、初めて知りました!
何をするコードなのか調べてみて、やっと理解できました^^;
使う機会も結構ありそうですね!
ありがとうございました!!
No.2
- 回答日時:
Me.Tx_テキストA = Null
とした時点で、テキストが更新されますので、またイベントが起きるのかな? でもその場合はif文の外に出したら、動きそうなもんですけど。
こういう場合は、ステップ実効をしてどの行でなにがおきて、次にどの行が実行されるかを確認してみるとよいです。
まあ、lostfocus時のイベントに書いておけば、良いような気もします。
回答ありがとうございます。
>こういう場合は、ステップ実効をしてどの行でなにがおきて、次にどの行が実行さ
>れるかを確認してみるとよいです。
ステップ実行は使ったことが無かったのですが、IF文にブレークポイントを設定して実行してみたところ、上から順番に実行されました。
「End Sub」が終わったところでフォームを見ると、やはりカーソルはTx_テキストBに移動していました。
また、コードを lostfocus 時のイベントに書いてやってみましたが、やはりカーソルはTx_テキストBに移動してしまいました。
この様な要求って結構ありそうですが、なかなか上手くいかないものですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessの更新後処理で特定の条件を満たしている場合、フォーカスを移動させない方法
PowerPoint(パワーポイント)
-
AccessVBA SetFocusとGoToControlが正常に作動しない
Access(アクセス)
-
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
-
4
どこにもフォーカスを当てたくない
Access(アクセス)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
7
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
8
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
9
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
10
Access2010 SetFocusが当たらない
その他(プログラミング・Web制作)
-
11
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
12
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
13
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
14
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
15
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
16
Access VBA Me.Requery レコードは削除されています エラー
その他(データベース)
-
17
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
18
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
19
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
20
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
保育士資格を取ろうと思うので...
-
ACCESS データ型の一括変更
-
カラーコディネートの資格が欲...
-
開くとテキストになるイラスト...
-
DELコードって何ですか?
-
誤字脱字の多い出版社の本で資...
-
Excelセル内の改行付き文章にHT...
-
五柳先生伝のここの訳を教えて...
-
「本文」という語の読み方について
-
リトルチャロを第1話から学習し...
-
免許の学科試験に落ちてしまい...
-
実務職とは一般的にはどのよう...
-
高圧ガス丙種化学特別の試験の...
-
第三者電気主任技術者の実務経...
-
国家試験にカンニングは…
-
精神疾患を患いながら難関大学...
-
彼女が試験前でとてもナイーブ...
-
登録販売者制度で一度試験に落...
-
妊娠37週で試験を受けても大...
-
ふぐの調理師免許取得まで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
否定的中傷はやめてください。 ...
-
保育士資格を取ろうと思うので...
-
開くとテキストになるイラスト...
-
ACCESS データ型の一括変更
-
五柳先生伝のここの訳を教えて...
-
テキスト?テクスト?
-
リトルチャロを第1話から学習し...
-
Access の SetFocus について教...
-
DELコードって何ですか?
-
「本文」という語の読み方について
-
誤字脱字の多い出版社の本で資...
-
ドイツ語 小数点のついた数字...
-
標準テキストのメールがHTMLメ...
-
WebサイトをコピーしてExcelに...
-
テキストの背景色。
-
つい最近MOS検定を受けた方...
-
VBAでユーザーフォームのテ...
-
Unicodeテキスト&テキスト
-
PowerPoint2016でのクリップア...
-
PickFolder アウトルックとア...
おすすめ情報
No.1さまへの補足説明です。
更新前処理に同じコードを書いて実行させると、Tx_テキストA に Nullを入れるステップで写真のようなエラーが出てしまいます。
よろしくお願いいたします。