MS Access Tips/Sample and VBA and Blog customize etc...

タブストップ「いいえ」は跳ばして次のコントロールへ移動する

何かのタイミングで、指定したコントロールへ移動する。もし、そのコントロールがタブストップ「いいえ」なら、さらにタブ移動順の次のコントロールへ、それも「いいえ」ならさらに次のコントロールへ・・・と移動させたい。タブストップは条件により変更される。

というような質問がありました。

とSendKeysを使えば簡単ですが、SendKeysは確実でないし、バグ含みなので、できれば使いたくないですね。
SendKeysステートメントのbug « MS Access Scrapbook

私も使う機会がありそうなので、TabIndexを調べて次のコントロールへ移動するコードを作成してみました。

サンプルフォーム

難易度: 難易度: 2

フォームモジュール

TabIndex をフォームを開いている間に変更することは、まず、ないでしょうから、フォームを開くときにでも、コントロールと TabIndex を Collection に格納しておくことにします。

下記のような仕様でコーディングします。
フォームヘッダーの オプション1 の更新後に、詳細の Txt1 へ移動します。
Txt1のTabStop がいいえの場合は、次の移動可能なコントロールへ移動します。

もし、最後まで、フォーカス可能なコントロールがなければ、オプション1から移動しない仕様です。

汎用関数化

複数のフォームで簡単に利用できるように、汎用関数化してみました。
また、条件付き書式で「無効」(使用不可)になっているとエラーがでるので、それも考慮したものにしています。

標準モジュール

フォームでの使用例

GotoNext、GotoPrevious は、1、-1 という数値でもOKです。
VBAエディタで
GotoControl TabIndexes, Me.テキスト1,
まで記述すると、GotoNext、GotoPrevious がリストに表示され選択入力できます。

定数リスト

フォームを開いてから、タブインデックスを変更する処理を行った場合は、その処理の後で、
GetTabIndexes TabIndexes
を再度、実行すれば変更後のタブインデックス順を再取得できます。

サンプルファイルが下記からダウンロードできます。
FrmMoveNextControl_07.zip (Access 2007 形式 - 33kb)
FrmMoveNextControl.zip (Access 2002-2003 形式 - 30kb)
FrmMoveNextControl_2k.zip (Access 2000 形式 - 30kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/309-89adeea4
該当の記事は見つかりませんでした。