フィールドがアクティブな時インナーカーソルにする方法

  テーブルやフォームのフィールド(コントロール)にフォーカスが移った際、
デフォルトではデータ全体が選択されています。その時データの最後にインナー
カーソル(キャレット)を表示する方法を説明します。


●操作手順●

(1) データベース全体の設定を行う
    Access2000ではフォーカスにカーソルが移動した際の動作を、データベー
    ス全体にわたって設定することが出来ます。
    メニューバーの[ツール]−[オプション]を開き[キーボード]タブを開きま
    す。その中の[フィールド移動時の動作]というオプショングループの値を
    [フィールドの最後に移動]にすれば、フィールドの移動時に自動的にデー
    タの最後の部分にカーソルが入ります。

(2) コードをコントロールのEnter/フォーカス取得時イベントに記述する
    この方法のメリットは特定のコントロールを選択して処理できる点です。
    逆にテーブルやクエリのデータシートビューではコードを記述できないた
    め、この方法でカーソルをデータの最後に移動することは出来ません。


● サンプル ●

'(2)-1 SendKeysステートメントの使用
Private Sub テキスト1_Enter()
    SendKeys "{F2}"
End Sub

'(2)-2 SelStart、SelLengthプロパティの使用
Private Sub テキスト1_Enter()
    Me.テキスト1.SelStart = Me.テキスト1.SelLength
    'Me.テキスト1.SelStart = 255 でも良い
End Sub


● 動作確認 ●

  新規フォームを作成し、テキストボックスを2つ作成します(それぞれ[テキ
スト1] [テキスト2])。そして、テキスト2のEnter/フォーカス取得時イベント
に上記のコードを記述します。
  フォームビューに変更し、テキストボックスに適当な値を入力して何度かフォー
カスを移動させて見ます。テキスト1では特に処理を行っていないので入力され
たテキスト全体が選択されますが、テキスト2では入力した値の最後の部分にカー
ソルが移動していることを確認して下さい。


● 詳細 ●

  サンプルコード(2)-1ではSendKeysステートメントを使用しています。これは
フォーカスを取得したコントロール上で[F2]キーを押下すると、カーソルがデー
タの最後の部分に来ることを利用しています。
  非常に簡単な方法ですが、Access97の場合SecdKeysステートメントによって
NumLockが解除されてしまうバグがありますので、この方法は使わないほうが良
いでしょう。

  (2)-2の方ではSelStart、SelLengthというプロパティを使用しています。
  SelStartプロパティはテキストボックス(コンボボックス)に入力されている
値の、どの部分にカーソルがあるかということを示します。
  SelLengthプロパティは、テキストボックス(コンボボックス)に入力されてい
る値の内、選択されている文字数を示します。

  ですから、サンプルではテキストボックス内の文字数をSelLengthプロパティ
によって取得し、そのままSelStartプロパティに代入しています。
  パッと考えると最後から2番目の文字の部分にカーソルが来そうなものですが、
SelStartプロパティは0から始まる(テキストエリアの先頭が0)なので、そのま
ま代入できるのです。つまり、SelStartプロパティに0を代入することによって、
常にテキストエリアの先頭にカーソルを持ってくることも出来ます。

  また、SelStartプロパティにテキストエリアに入力されている文字数よりも
大きな数を設定した場合、自動的に最後尾にカーソルが入ります。これを利用
して、テキストボックスやコンボボックスの入力最大数である255をSelLength
プロパティに代入しても同じ挙動を示します。

Access97/2000



戻る


Excel Word Access VBA! モーグ