
単票フォームに非連結のテキストボックス「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で質問しましょう!
似たような質問が見つかりました
- 電車・路線・地下鉄 TX-1000系 TX-2000系 TX-3000系 1 2022/09/19 14:06
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- ルーター・ネットワーク機器 L3スイッチからメディアコンバータを経由してPCへ接続出来ません。 3 2022/07/03 22:15
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- その他(プログラミング・Web制作) PythonのTkinterイベントについて 2 2022/12/10 23:00
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- 電車・路線・地下鉄 TXには運転手は不要だと思いますがどうでしょうか? 横浜シーサイドラインは今は無人なのかな。 あとは 5 2022/07/27 08:32
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessの更新後処理で特定の条件を満たしている場合、フォーカスを移動させない方法
PowerPoint(パワーポイント)
-
どこにもフォーカスを当てたくない
Access(アクセス)
-
AccessVBA SetFocusとGoToControlが正常に作動しない
Access(アクセス)
-
-
4
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
5
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
6
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
7
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
8
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
9
Access2010 SetFocusが当たらない
その他(プログラミング・Web制作)
-
10
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
11
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
12
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
13
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
14
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
15
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
16
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
17
Access フォームのデータがテーブルに反映されない
Access(アクセス)
-
18
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
19
サブフォームを非表示させる方法を教えて下さい
その他(Microsoft Office)
-
20
レコードを保存するコード アクセスvba
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
否定的中傷はやめてください。 ...
-
VBAでユーザーフォームのテ...
-
開くとテキストになるイラスト...
-
PickFolder アウトルックとア...
-
DMメール、DMはがき
-
ユーキャンの試験が今日なので...
-
Access の SetFocus について教...
-
社労士試験のテキスト
-
メールの添付ファイルが送信で...
-
DELコードって何ですか?
-
つい最近MOS検定を受けた方...
-
リトルチャロを第1話から学習し...
-
ネットに『蜘蛛の糸』の英文テ...
-
ACCESS データ型の一括変更
-
アクロバットリーダーでテキス...
-
特許明細書での、Σ記号の書き方
-
ピアノの検定試験?を教えてく...
-
中途半端な生き方してきて、ま...
-
調理師の資格
-
統合失調症でも登録販売者にな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開くとテキストになるイラスト...
-
リトルチャロを第1話から学習し...
-
テキスト?テクスト?
-
ACCESS データ型の一括変更
-
Access の SetFocus について教...
-
DELコードって何ですか?
-
フォームのテキストボックスが...
-
「本文」という語の読み方について
-
五柳先生伝のここの訳を教えて...
-
口話、読唇術の学習方法教えて...
-
標準テキストのメールがHTMLメ...
-
TOEFLの問題集として。
-
cadでの文字サイズの変更方法
-
OUTLOOK EXPRESSのTEXT様式(原...
-
EXCEL&WORDの教材(教科書)は...
-
パソコン検定について
-
NHK語学番組のテキストの保管
-
WordVBA 指定の箇所にテキスト出力
-
ドイツ語 小数点のついた数字...
-
賃貸不動産経営管理士を独学で...
おすすめ情報
No.1さまへの補足説明です。
更新前処理に同じコードを書いて実行させると、Tx_テキストA に Nullを入れるステップで写真のようなエラーが出てしまいます。
よろしくお願いいたします。