word vba macro - динамически ссылочные элементы формы - PullRequest
1 голос
/ 22 августа 2011

У меня есть созданная мной пользовательская форма, которая содержит несколько текстовых полей.Каждое из этих полей называется name1, name2, name3 и т. Д.

Эта пользовательская форма вызывается из макроса Word, используемого для обработки данных.В зависимости от данных в файле, на котором выполняется макрос, я хочу, чтобы содержимое каждого массива отображалось в каждом из этих текстовых полей.

Я хочу иметь возможность динамически ссылаться на текстовые поля формы, чтобы я мог заполнять их из цикла, в отличие от необходимости делать отдельный оператор 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

Я хочу иметь возможность что-то гораздо более простое и эффективное, как:

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

К несчастью, к сожалениюхотя я не могу понять, как это сделать.

Возможно ли это?Я надеялся, что что-то похожее на то, что можно сделать в Actionscript, сработает, но это не сработало (в Actionscript я просто сделал бы dForm ["name" + p] .Text = myVar [p]).

Есть идеи / предложения?Ничто из того, что я пробовал, не сработало, и я не смог ничего найти в Интернете по этому поводу.Я уверен, что нужно немного поработать, чтобы избежать необходимости выполнять невероятное количество операторов if («nameBextBoxes» - это лишь один из многих повторяющихся TextBoxes, который является частью моей формы, поэтому приходится делать операторы ifибо все они будут длиться вечно) ...

1 Ответ

1 голос
/ 22 августа 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...