|
コードとしては意外と簡単です。コントロールが選択されているかいないかを取得・設定するプロパティ
[InSelection] をTrueまたはFalseに設定するだけです。もちろん、Trueにすれば選択状態、Falseにすれば非選択状態になります。次の例は"フォーム1"上のラベルコントロールを選択状態にする例です。 |
Dim frm As Form
Dim ctl As Control
Dim intCntrlType As Integer
Set frm = Forms!フォーム1
intCntrlType = acLabel
For Each ctl In frm.Controls
With ctl
If .ControlType = intCntrlType Then
.InSelection = True
Else
.InSelection = False
End If
End With
Next ctl
それではこのコードについて説明していきましょう。 |
|
まず、"Set frm = Forms!フォーム1"の部分ですが、ここでは特定のフォームを対象に処理を行いますので、そのフォームを、あらかじめ[Form]オブジェクトとして宣言されている変数"frm"にセッ
トします。これはあくまでも対象フォームを指定すればよいので、変数を使わずに以降のコードすべてで
"Forms!フォーム1" のように記述しても構いません。上記のコードを1つのプロシージャにする場合には、フォーム名またはFormオブジェクトを引数とすればより汎用的なプロシージャにすることができます。
続いて、変数"intCntrlType" にAccessが持っている組み込み定数 "acLabel"
をセットしていますが、この定数がここでの対象コントロールである「ラベルコントロール」を表しています。コントロールは、その種類を示すプロパティとして
[ControlType]プロパティを持っていますが、このプロパティ値を取得することによってそのコントロールがどの種類か調べることができます。それだけでなく、このプロパティ値をVBAを使って変更することによって、そのコントロールを別の種類のコントロールに変えることもできます。Accessのメニューの[書式]-[コントロールの種類の変更]の操作のように、ラベルコントロールをテキストボックスコントロールに変更することができるのです。 |
以下に一例としていくつかのコントロールの組み込み定数を示します。これ以外のコントロールについてはAccessのヘルプから「ControlType」で検索してみてください。
ラベル |
acLabel |
四角形 |
acRectangle |
コマンド ボタン |
acCommandButton |
オプション ボタン |
acOptionButton |
チェック ボックス |
acCheckBox |
テキスト ボックス |
acTextBox |
リスト ボックス |
acListBox |
コンボ ボックス |
acComboBox |
|
|
続いて "For Each ctl In frm.Controls" の部分ですが、すでに変数"frm"には"フォーム1"がセットされていますので、このコードは「"フォーム1"の中にあるすべてのコントロール(frm.Controls)から1つずつ順番にコントロールを取り出す」というループ処理を表しています。そして次の
With ctl〜End With で囲まれた部分が、その1つずつのコントロールに対して行う処理の部分です。ここでは、すでに説明した[ControlType]プロパティの値が変数intCntrlType(ここではラベルコントロール)と同じかどうか調べ、もし同じであれば[InSelection]プロパティを
True にして選択状態にしています。 |
今回は、コントロールの種類に応じて選択状態を切り替えるというコードだけを説明しましたが、フォーム内のすべてのコントロールを列挙する
"For Each ctl In frm.Controls"の部分と、コントロールのさまざまなプロパティを組み合わせることによって、すべてのコントロールあるいはある条件にあてはまるコントロールに対して、デザイン上の一括変更などがいろいろできると思います。アドインを作る場合だけでなく、開発時だけに使うようなちょっとしたプロシージャを作る際にも応用できるのではないでしょうか?。 |