2011-08-22 5 views
1

여러 개의 TextBox가 포함 된 사용자 양식이 있습니다. 이러한 각 필드의 이름은 name1, name2, name3 등입니다.단어 vba 매크로 - 동적 참조 양식 요소

이 userform은 데이터 처리에 사용되는 Word 매크로에서 호출됩니다. 매크로가 실행되는 파일의 데이터에 따라 각 텍스트 상자에 배열의 내용을 표시하려고합니다.

내가 할 수 있기를 원하는 것은 각 개별 값/텍스트 상자에 대해 별도의 if 문을 수행하는 대신 루프 내에서 채울 수 있도록 TextBoxes 양식을 동적으로 참조하는 것입니다.

그래서 예를 들어, 대신 같은 것을 할 필요의 :하지만 Unforunately

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

, 나는 할 수 없습니다 : 내가 좋아하는 훨씬 더 간단하고 효율적인 뭔가를 할 수 있도록하려면

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 

을 어떻게하는지 알아 낸다.

이것이 가능합니까? 나는 Actionscript에서 수행 할 수있는 것과 비슷한 것이 효과적 일 것이라고 기대했지만, 그렇게하지는 않았다. (Actionscript에서는 dForm [ "name"+ p] .Text = myVar [p]).

아이디어가 있습니까? 내가 시도한 것은 아무 것도 없으며, 이것에 관해서 온라인에서 아무것도 찾을 수 없었습니다. 나는 믿을 수없는 if 문 ('name'TextBoxes '는 내 양식의 일부인 많은 반복 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

는 (I)의 첫 번째 제안을 사용! 정말 고마워! – Mark

+0

언제든지 !! 제발 내 대답 옆에있는 "0"아래의 "수락"확인란을 클릭하십시오 그래서 그것에 대한 포인트를 얻을 수 있습니다! – transistor1

+0

완료 - 그것에 대해 알려 줘서 고마워, 내가 여기 새로 왔어. – Mark