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

コントロールをグループ化して操作する

複数のコントロールをグループ化してVBAで一括して操作したいということはよくありますね。

今回は、下記の仕様を例にして、いろいろなアプローチを紹介します。

フォーム上に、
オプショングループ フレーム1
この中に、オプションボタンが2つ(オプション値 1, 2)
テキストボックスが8個、名前は、txt1, tex2 ・・・txt8

オプション値 1 のボタンが選択されたときは、txt1 ~ txt4 が使用可能、それ以外は使用不能、
オプション値 2 のボタンが選択されたときは、txt5 ~ txt8 が使用可能、それ以外は使用不能

 

難易度:

名前文字列による参照

例示した仕様のように名前が規則的なら、名前の文字列を基に参照するのが簡単でしょう。
名前の文字列で参照する場合は、Me("txt1").Enabled = False というような構文になります。
この構文を利用してループで処理します。

Tagプロパティの利用

名前が規則的でない場合は上記の方法は使えません。
その場合は、Tagプロパティを使ってグループ分けする方法があります。

事前にデザインビューで、
txt1 ~ txt4 のTagプロパティを A、
txt5 ~ txt8 のTagプロパティを B と設定しておきます。

配列に格納

上記の方法の場合、For Each ですべてのコントロールを総当たりすることになりますので、コントロール数が多いと重くなる懸念があります(実際は体感できる差はでないと思いますが)。
また、Tagコントロールは他の用途で使っているというときは使えません。
そこで、コントロールを配列にいれて、操作するという方法もあります。

フォーム読み込み時に配列にセットするというコードが必用になりますが、参照は For Each でシンプルにできます。また、フォームでの設定は不必要で、VBA内で完結しますので、コードの可読性が高くなると言うメリットもあります。

Collectionオブジェクトに格納

配列の代わりにCollectionオブジェクトに格納してみました。

コントロール群を格納するCollectionを、さらにCollectionに格納するという入れ子構造にしています。グループ数が多くてもCollectionの宣言が一つですみます。また、グループに解りやすい名前をつけて管理することができます。

コントロールをグループ化して操作する その2   この記事の補足情報がありますので参照ください。

サンプルファイルが下記からダウンロードできます。
vbaControlGroup_07.zip (Access 2007-2010 形式 - 23kb)
vbaControlGroup.zip (Access 2002-2003 形式 - 16kb)
vbaControlGroup_2k.zip (Access 2000 形式 - 16kb)

なお、コントロールをまとめて操作するということに関しては、YU-TANGさんが素晴らしい関数を作成されてますので、紹介しておきます。
C_ 関数 - コントロールをまとめて操作

拍手する

Leave a reply






Trackbacks

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