質問: true 試しましたがエラー・・・(当たり前でしょうが、、、 試(5)...googleで『vba [] 文字列 結合』等色々調べましたがあまり良い例に辿り着けず、、、 ご教授いただければ幸いです。 何卒、宜しくお願い致します。
回答: 土曜の深夜にお疲れ様です。 > tbox = array("テキストボックスa", "テキストボックスb", "テキストボックスc") これだと、変数tboxに格納されるのは、「文字列の配列(のようなもの)」に なってしまいますので、「tbox(0)」などでは意図した動作になりません。 ※なお、変数を参照する場合、「[ ]」による括りは不要です※ ご質問の動作を実現するには、以下の2通りの考え方があるかと思います。 a)tboxに格納した文字列を、controlsコレクションのインデックスとして使用する: private sub form_load() dim tbox as variant tbox = array("テキストボックスa", "テキストボックスb", "テキストボックスc") dim i as integer for i = lbound(tbox) to ubound(tbox) 'フォーム内のコントロールのコレクション「controls」を使用し、変数tboxに '格納した文字列をインデックス(=コントロール名)として指定 '※インデックスの型はstringでないとエラーになるため、cstr関数で変換※ controls(cstr(tbox(i))).locked = true next i end sub b)tboxに格納するのを、文字列ではなくコントロールにする: private sub form_load() dim tbox as variant 'テキストボックス群自体を、tboxに格納 tbox = array([テキストボックスa], [テキストボックスb], [テキストボックスc]) dim i as integer for i = lbound(tbox) to ubound(tbox) 'tboxに格納した要素ごとに処理を実行 tbox(i).locked = true next i end sub ・・・以上です。 なお、ループ処理には、他に「for each ~ next」の構文もあります。 今回の事例では、(特に「b」の場合は)この方がすっきりするかもしれません。 a)tboxに格納した文字列を、controlsコレクションのインデックスとして使用する: private sub form_load() dim tbox as variant tbox = array("テキストボックスa", "テキストボックスb", "テキストボックスc") 'tboxに格納した各要素を格納するための変数memを宣言 '※変数は、variant型か、オブジェクト型(objectやcontrolなど)にする必要あり※ dim mem as variant for each mem in tbox controls(cstr(mem)).locked = true next end sub b)tboxに格納するのを、文字列ではなくコントロールにする: private sub form_load() dim tbox as variant tbox = array([テキストボックスa], [テキストボックスb], [テキストボックスc]) dim mem as variant for each mem in tbox mem.locked = true next end sub ・・・以上、参考まで。