Access

Access クリックでフィールド全体を選択状態にする方法

Accessフォーカス
記事内に商品プロモーションを含む場合があります

AccessではTABキー・ENTERキーによるフォーカス移動時のフィールドの状態を設定できますが、今回はマウスクリックによるフィールド選択時のフィールドの状態を制御したいと思います。

Accessのオプション設定でキー移動によるフィールド状態を変更する

まずはキー移動時のフィールド状態の変更方法を確認しましょう。

マウスクリックではなく、キー移動でフィールドの状態が変わればいい方はこの方法が一番手軽ですのでお試しください。

Accessのオプションから詳細設定を開きます。

「フィールド移動時の動作」で希望のフィールド状態を選びます。

以下はAccess2007のオプション設定画面です。バージョンによってUIが異なります。

Accessオプション

この場合、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なのでテキストの先頭位置にフォーカスされます。

.SelLengthはあってもなくてもOKです。

フィールドの末尾に移動

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を実行するだけです。

備考フィールドを全選択する必要はありません。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。