none
Accessでのテキストの入力機能について RRS feed

  • 質問

  • いつもお世話になっております。

    ・Access2010

    ・テキスト
    定型入力:999


    Private Sub テキスト_AfterUpdate()
        '適当なコントロールにフォーカス当ててから、フォーカスを戻す
        Me.閉じる.SetFocus
        Me.テキスト.SetFocus
    End Sub


    上記の環境で、テキストに何か適当な数値を入力すると、テキストにフォーカスが戻ります。
    この状態で、何か数値を入力すると前回に入力した内容が消えて、テキストに値が入力されていきます。

    定型入力を上記のように設定していると確認できる仕様のようです。

    この機能は便利なので、定型入力を設定していなくてもできるようにできませんでしょうか?
    (わざわざ入力内容を消さなくても消えてくれる)

    2015年3月12日 0:44

すべての返信

  • こんにちは。

    「定型入力が定義されているフィールドにデータを入力すると、データは常に上書きモードで入力されます。」
    https://msdn.microsoft.com/ja-jp/library/office/ff821336.aspx?f=255&MSPPError=-2147217396

    単純に上書きモードにしただけでは最初の入力で全体が消えるようにはなりませんでしたので
    定型入力は特殊な動きをしているような気がします…。

    代替案ですが「わざわざ入力内容を消さなくても消えてくれる」のが目的ということで、
    テキストフォーカス時に全選択されていれば済むような気がするのですが如何でしょう。

    常に有効にするのであれば、
     [ツール]-[オプション]-[キーボード]-[フィールド移動時の動作]を「フィールド全体を選択」にしてください。

    特定のAccessファイル、特定のテキストでのみ有効にしたいのであれば
    個別に以下のVBAを実装する必要がありそうです。

    txtHoge.SelStart=0
    txtHoge.SelLength=LenB(txtHoge.Value)


    2015年3月20日 18:32
    モデレータ
  • 返答をありがとうございます。

    『定型入力:なし』の環境にて、いくつか動作確認をしましたが、
    いまいち良い方法が見つかりません。

    ※フィールド移動時の動作は、フィールド全体を選択 (標準設定)にしています。

    ----------------------------------------------------
    ◇コマンドボタンの場合
    「下記のVBでは、正常動作(文字を全選択した状態になる)

    Private Sub cmd_テスト_Click()
        Me.テキスト.SetFocus
        Me.テキスト.SelStart=0
        Me.テキスト.SelLength=Len(Me.テキスト.Value)
    End Sub
    ----------------------------------------------------
    ◇AfterUpdateイベントの場合 (※キー操作は、Enterキー

    「下記のVBでは、次のコントロールに移るだけ

    Private Sub テキスト_AfterUpdate()
        Me.テキスト.SelStart=0
        Me.テキスト.SelLength=Len(Me.テキスト.Value)
    End Sub
    ----------------------------------------------------
    「下記のVBでは、テキストの左端にカーソルが移るだけ

    Private Sub テキスト_AfterUpdate()
        Me.テキスト.SelStart=0
        Me.テキスト.SelLength=Len(Me.テキスト.Value)

        '適当なコントロールにフォーカス当ててから、フォーカスを戻す
        Me.閉じる.SetFocus
        Me.テキスト.SetFocus
    End Sub


    ----------------------------------------------------
    ◇BeforeUpdateイベントの場合
    「『CancelEvent』を使用するとで、テキストが全選択状態になるが、※その後の操作ができない

    Private Sub txt_科目名_BeforeUpdate(Cancel As Integer)
        Debug.Print ""
        Me.txt_科目名.SelStart = 0
        Me.txt_科目名.SelLength = Len(Me.txt_科目名.Value)

        DoCmd.CancelEvent
    End Sub
    ----------------------------------------------------

    いくつかテストした所、SelLengthプロパティの調子が悪く感じます。
    単純にテキスト入力後に全選択状態で再入力したいだけですが、なかなか上手いこと行きませんね。

    (AfterUpdateイベントとの相性も悪いのかも?)

    • 編集済み IndoaK119 2015年3月24日 0:54
    2015年3月24日 0:44
  • 「エラーパターン追加

    ◇コマンドボタンにて、

    「『Filter』機能でカレントレコードが0になる場合、エラーになる
    実行時エラー 2185
    コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。

    Private Sub cmd_テスト_Click()
        Me.Filter = "項目1" = 'レコードに存在しない値' "
        Me.FilterOn = True

        Me.テキスト.SetFocus
        Me.テキスト.SelStart=0    'ここでエラー (また、テキストがNull値でもエラーになるのに注意)
        Me.テキスト.SelLength=Len(Me.テキスト.Value)
    End Sub

    2015年3月24日 0:54
  • コントロールのGotFocusイベント時に、以下を実行してみてはいかがでしょうか?

        Me.テキスト.SelStart=0
        Me.テキスト.SelLength=Len(Me.テキスト.Value)

    #Enterイベントだと以下に記述があるように、フォームがアクティブ化した時のタイミングだと発生しないようなので、今回の目的には合わなそうに思います。

    TextBox.Enter イベント (Access)
    https://msdn.microsoft.com/JA-JP/library/office/ff197769.aspx

    #ちなみにあくまで参考までですが、.NETではGotFocusイベントの使用は基本的には推薦されておらず、代わりにEnterイベントを使います。もしご存じなければ、将来のために頭の隅に入れて置いて下さい。

    Control.GotFocus イベント
    https://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.gotfocus(v=vs.110).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年3月24日 2:01
    モデレータ
  • 返答をありがとうございます。

    下記のようにVBを組みましたが、

    テキストに値を記入した後に、テキストの左端にカーソルが行くだけで全選択がされません。

    mdbを新規で作り直して、標準設定のままでしています。

    (オプション:フィールド移動時の動作は、フィールド全体を選択)

    Private Sub テキスト_AfterUpdate()
        '適当なコントロールにフォーカス当ててから、フォーカスを戻す
        Me.cmd_閉じる.SetFocus
        Me.テキスト.SetFocus
    End Sub

    Private Sub テキスト_GotFocus()
        If IsNull(Me.テキスト) Then Exit Sub
        
        Me.テキスト.SelStart = 0
        Me.テキスト.SelLength = Len(Me.テキスト.Value)
    End Sub

    2015年3月26日 2:56
  • どのように操作されていますか? 私の方で試して見ましたが、通常の使い方であれば、ClickイベントとEnterイベントで、

        If IsNull(Me.テキスト) Then Exit Sub
        
        Me.テキスト.SelStart = 0
        Me.テキスト.SelLength = Len(Me.テキスト.Value)

    を実行すれば十分である気がしてきました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年3月26日 4:16
    モデレータ