
単票フォームに非連結のテキストボックス「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(パワーポイント)
-
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
AccessVBA SetFocusとGoToControlが正常に作動しない
Access(アクセス)
-
5
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
6
どこにもフォーカスを当てたくない
Access(アクセス)
-
7
Access2010 SetFocusが当たらない
その他(プログラミング・Web制作)
-
8
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
9
Access フォームのデータがテーブルに反映されない
Access(アクセス)
-
10
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
11
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
12
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
13
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
14
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
15
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
16
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
17
access テキストボックスの値取得
Access(アクセス)
-
18
Access VBA Me.Requery レコードは削除されています エラー
その他(データベース)
-
19
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
20
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
開くとテキストになるイラスト...
-
アクセスの「レポート作成でき...
-
DELコードって何ですか?
-
五柳先生伝のここの訳を教えて...
-
NHK語学番組のテキストの保管
-
標準テキストのメールがHTMLメ...
-
テキスト?テクスト?
-
【Excel97】オートフィルについて
-
Excelセル内の改行付き文章にHT...
-
本免試験落ちました… 確実な勉...
-
いつもアドバイス本当にありが...
-
皆さんは専門学校の試験で再試...
-
明日漢検なんですけどなんにも...
-
地方公務員試験について 自分は...
-
免許の学科試験に落ちてしまい...
-
cannot ~ too …「いくら…して...
-
ユーキャンで調理師免許をとろ...
-
登録販売者試験についてです
-
自分は色音痴で、そんな状態で...
-
2級電気工事施工管理検定試験...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
否定的中傷はやめてください。 ...
-
保育士資格を取ろうと思うので...
-
開くとテキストになるイラスト...
-
ACCESS データ型の一括変更
-
五柳先生伝のここの訳を教えて...
-
テキスト?テクスト?
-
リトルチャロを第1話から学習し...
-
Access の SetFocus について教...
-
DELコードって何ですか?
-
「本文」という語の読み方について
-
誤字脱字の多い出版社の本で資...
-
ドイツ語 小数点のついた数字...
-
標準テキストのメールがHTMLメ...
-
WebサイトをコピーしてExcelに...
-
テキストの背景色。
-
つい最近MOS検定を受けた方...
-
VBAでユーザーフォームのテ...
-
Unicodeテキスト&テキスト
-
PowerPoint2016でのクリップア...
-
PickFolder アウトルックとア...
おすすめ情報
No.1さまへの補足説明です。
更新前処理に同じコードを書いて実行させると、Tx_テキストA に Nullを入れるステップで写真のようなエラーが出てしまいます。
よろしくお願いいたします。