2011-08-22 20 views
1

私は、いくつかのTextBoxを含む私が作成したuserformを持っています。これらの各フィールドの名前はname1、name2、name3などです。word vbaマクロ - 動的参照フォーム要素

このユーザーフォームは、データの処理に使用されるWordマクロから呼び出されます。マクロが実行されているファイルのデータに応じて、配列のコンテンツをそれぞれのTextBoxに表示する必要があります。

個々の値/テキストボックスごとに別々のifステートメントを実行するのではなく、ループ内からそれらを読み込むことができるように、動的にフォームのTextBoxを参照することができます。

例えば、代わりにこのような何かをしたのだから、

For p = 1 To count 
    if p=1 then 
     dForm.name1.Text=myVar(p) 
    end if 
    if p=2 then 
     dForm.name2.Text=myVar(p) 
    end if 
    . 
    . 
    . 
    etc. 
Next p 

私ははるかに簡単かつ効率的のようなものにできるようにしたい:Unforunately

For p = 1 To count 
    tempString = "name" & p 
    dForm.tempString.Text = myVar(p) 
Next p 

、私はできませんがこれを行う方法を理解する。

これは可能ですか?私はActionscriptでできることに似た何かがうまくいくことを期待していましたが、そうではありませんでした(ActionscriptではdForm ["name" + p] .Text = myVar [p])。

アイデア/提案はありますか?私が試したことはありませんでしたが、私はこれについてオンラインで何かを見つけることができませんでした。私は確信しているいくつかの回避策は、ifステートメント( 'name' TextBoxes 'は私のフォームの一部である多くの繰り返しテキストボックスの一つであるので、ifステートメント

答えて

1
UserForm1.Controls("name" & p).Value = myVar(p) 

か... ...それらのすべてが)永遠にかかるため

私がまさに必要だ
Private Sub FillTextBoxes() 
    Dim ctl As Control 

    For Each ctl In UserForm1.Controls 
     If TypeName(ctl) = "TextBox" Then 
      If ctl.Name Like "name*" Then 
       ctl.Value = myVar(p) 
      End If 
     End If 
    Next 
End Sub 
+0

は(私は)あなたの最初の提案を使用しました!本当にありがとう! – Mark

+0

いつでも!私の答えの横にある "0"の下の "受け入れ"チェックボックスをクリックしてください。私はそれのためのポイントを得ることができます! – transistor1

+0

完了 - それについて私に知らせてくれてありがとう、私はここに新しいので、それがどのように働いているのか分からなかった。 – Mark

関連する問題