Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2013)
テキストボックス内の文字選択について
投稿日時: 19/08/06 09:47:56
投稿者: NoLookUp

帳票フォーム
長整数型フィールドに連結したとりあえず1つだけのテキストボックス
(最終的には同様の作動をさせるテキストボックスを3個設置したものになり、その状態で下記のVBAを3個のテキストボックスに対して設置しましたが、うまく作動しないのでテキストボックス1個で試しています)
 
そのテキストボックスを入力更新・レコード更新したあとも次のレコードへ移らさせず同じレコードのまま、テキストボックスの中身を全選択した状態(色反転)にしたいです。
 
他レコードへの移動は、テキストボックスの値を未入力未更新(Enter,Tabのみ)、または、マウスを利用です。
 
やったことは
 
Private Sub テキストボックス_AfterUpdate()
Dim P
P = Me.CurrentRecord ' P = Me.Bookmark
Me.Requery ' DoCmd.RunCommand acCmdSaveRecord : DoCmd.GoToRecord , , acFirst これもダメ
DoCmd.GoToRecord , , acGoTo, P ' Me.Bookmark = P としてのBookMark移動も同結果
テキストボックス.SetFocus
' テキストボックスを複数用意し、ワンクッションさせるような形で _
  別テキストボックス.SetFocus _
  テキストボックス.SetFocus _
  でもダメでした。

End Sub
 
Private Sub テキストボックス_GotFocus() ' _Enterイベントも同結果
' 下記を_AfterUpdate の末尾でやってもダメ
テキストボックス.SelStart = 0
テキストボックス.SelLength = Len(テキストボックス.Text)
End Sub
 
結果は
レコード行は移動しませんが、テキストボックスの中身が全選択にならず、カーソルの位置が値文字の先頭に来てしまいます。

回答
投稿日時: 19/08/06 13:07:18
投稿者: hatena
投稿者のウェブサイトに移動

NoLookUp さんの引用:
そのテキストボックスを入力更新・レコード更新したあとも次のレコードへ移らさせず同じレコードのまま、テキストボックスの中身を全選択した状態(色反転)にしたいです。

そのような仕様にしてしまうと、そのフォームでは一切更新できなくなりますが、それでいいのですか。
そのようにしたい目的があると思うのですが、それを提示されたほうがいいかと思います。
 
例えば、入力チェックをしたい、入力規則に反しているときは、レコード更新されないようにしたいとか。
 
無意味な仕様に回答しても、あとからそうじゃないと言われそうなので。

回答
投稿日時: 19/08/06 13:28:30
投稿者: sk

NoLookUp さんの引用:
そのテキストボックスを入力更新・レコード更新したあとも
次のレコードへ移らさせず同じレコードのまま、
テキストボックスの中身を全選択した状態(色反転)にしたいです。

NoLookUp さんの引用:
Private Sub テキストボックス_AfterUpdate()
Dim P
P = Me.CurrentRecord ' P = Me.Bookmark
Me.Requery ' DoCmd.RunCommand acCmdSaveRecord : DoCmd.GoToRecord , , acFirst これもダメ
DoCmd.GoToRecord , , acGoTo, P ' Me.Bookmark = P としてのBookMark移動も同結果
テキストボックス.SetFocus
' テキストボックスを複数用意し、ワンクッションさせるような形で _
  別テキストボックス.SetFocus _
  テキストボックス.SetFocus _
  でもダメでした。
End Sub

Private Sub テキストボックス_AfterUpdate()
     
    Dim p As Long
     
    p = Me.CurrentRecord
    Me.Painting = False
    Me.Requery
    DoCmd.GoToRecord acActiveDataObject, , acGoTo, p
    With Me![テキストボックス]
        .SetFocus
        SendKeys "{F2}"
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
    Me.Painting = True
 
End Sub
--------------------------------------------------------
 
無理矢理やるならこういうことになりますが、
あまりお奨めはしません。
 
hatena さんの引用:
そのような仕様にしてしまうと、そのフォームでは一切更新できなくなりますが、
それでいいのですか。

「一切更新できなくなる」ってこともないのですが、
「他のレコード/コントロールにフォーカスを移動させる際の
操作性が損なわれる(スムーズに移動できない)」という点においては
あまり良い UI 設計だとは正直思えません。
 
hatena さんが指摘されているように、何故そのような処理を
実行しようとしているのか、その目的や理由を明記されることを
お奨めします。

投稿日時: 19/08/06 14:02:27
投稿者: NoLookUp

なぜ??
 
原票もなく、入力した値がOKかどうか1発で判断しかねるという状態です。
 
たとえば、入力したテキストボックの値に対するカラーを表示させ、見た目でOKならそのまま[空ENTER]、だめなら[再入力]ということができればという感じです。
 
その時にテキストボックス内の文字が選択反転していればそのまま上書き入力し直しになりますが、現状はそうでないので文字をすべてDelキー削除して入力しなければならないという手間がかかります。
そこで、あらかじめ全選択状態にしておきたいということです。
 
 
skさんの
SendKeys "{F2}"
の無理矢理パターンで出来そうなのでそれで進行させます。
 
ありがとうございました。