AccessではTABキー・ENTERキーによるフォーカス移動時のフィールドの状態を設定できますが、今回はマウスクリックによるフィールド選択時のフィールドの状態を制御したいと思います。
- フィールド全体が選択されている状態
- フィールドの先頭にカーソルがある状態
- フィールドの末尾にカーソルがある状態
Accessのオプション設定でキー移動によるフィールド状態を変更する
まずはキー移動時のフィールド状態の変更方法を確認しましょう。
マウスクリックではなく、キー移動でフィールドの状態が変わればいい方はこの方法が一番手軽ですのでお試しください。
Accessのオプションから詳細設定を開きます。
「フィールド移動時の動作」で希望のフィールド状態を選びます。
以下はAccess2007のオプション設定画面です。バージョンによってUIが異なります。
この場合、Access自体の設定を変更することになりますので複数のアプリケーションがある場合、すべてに適用されます。
特定のアプリケーションのみに適用することはできません。
フォーカスを取得した時にフィールドの状態を変更する方法
先の方法ではキー入力(ENTER,TAB)による移動のみが設定の対象となっており、マウスクリックによるフォーカス取得時には適用されません。
このため、マウスクリックでフィールドの状態を変更するためには少しだけコードを記述する必要があります。
使うプロパティ(メソッド)は、以下の通りです。
.setFocus | コントロールにフォーカスを移動 |
.SelStart | 文字列のスタート位置を取得または設定 |
.SelLength | 文字列の長さを取得または設定 |
コードはクリックイベント(Clickイベント)に記述します。
フィールド全体を選択
Private Sub txt入力項目_Click() With Me.txt入力項目 'テキストの開始位置またはカーソルの位置を設定 .SelStart = 0 '選択されている文字の数を決定 .SelLength = Len(.Value) End With End Sub
文字列のスタート位置を0にし、選択長を文字列長にすることで文字列の全選択となります。
フォーカス取得時(GotFocus)イベントに記述する方法を紹介しているサイトもあるのですが、私の環境(Access 2007)では正しく動作しませんでした。
以下、うまくいかなかったサンプルコードです。
Private Sub txt入力項目_GotFocus() With Me.txt入力項目 .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With End Sub
.SetFocus行にブレークポイントを置くと正しく動作するのですが、ブレークしない場合(通常はもちろんブレークしませんね)全選択されませんでした。
フィールドの先頭に移動
Private Sub txt入力項目_Click() With Me.txt入力項目 'テキストの開始位置またはカーソルの位置を設定 .SelStart = 0 .SelLength =0 End With End Sub
スタート位置も選択文字列数も0なのでテキストの先頭位置にフォーカスされます。
フィールドの末尾に移動
Private Sub txt入力項目_Click() With Me.txt入力項目 'テキストの開始位置またはカーソルの位置を設定 .SelStart = Len(.Value) End With End Sub
スタート位置を文字列長にしているので、文字列の後ろにフォーカスされます。
ボタンクリックでクリップボードに文字列をセット
今回長い文字列の項目をボタンクリック(Copy用のボタンを作成)でクリップボードにコピーしたいというニーズがありました。
''------------------------------------------------------------ ' 処理内容:クリックでクリップボードにコピー ' 引数:なし ' 戻り値:なし '------------------------------------------------------------ Private Sub cmdコピー_Click() Me.txt備考.SetFocus DoCmd.RunCommand acCmdCopy End Sub
実装は簡単。
cmdコピーボタンのクリックイベントで、コピーしたい項目(サンプルではtxt備考)にフォーカスを移動してacCmdCopyを実行するだけです。
備考フィールドを全選択する必要はありません。