コントロールを変数にしてForループ Excel VBA


コントロール引数にしたプロシージャを作るにはどうすればいいのか、 コントロールForループに入れてやるにはどうすればいいのか。

経緯

フォームをダブルクリックした際に フォーム上の 全テキストボックスについて .Enabled を変化させようとしました。 全てのコントロール名を書き連ねるのは大変なので、 ループ を使って複数のコントローラに対して処理を行おうと考えました。

解決法

VBA では Me.Controls("ControlName") でコントロールを取得できます。 そこで、 .Enabled を変更する TextBox の名前を txtTitle1txtTitle2 というようにしておき、次のようなループ処理を実行します。

Me.Controls で取得したコントローラについて複数行の初期化処理を行う場合は With を使うのもいいですが、 次のように変数に代入して使うこともできます。

変数宣言のところで As TextBox などと書くと エラーが出ます。

これらを利用して作ったのが次のコードです。

その他下記のような方法が使えそうです。

配列を使う

.Net では コントロール の 配列 (のようなもの) に コレクション というのがあり、 配列のように扱うことができます。 しかし VBA には コレクション クラス が用意されていません。

しかし、 Me.Controls の引数にする String は配列にできます。

コレクションクラスを作ってしまう

コントロールの集合を扱えるようなクラスを作ってしまうのもいいと思います。