2014-12-01 5 views
0

У меня есть пользовательская форма с 500 + текстовыми полями, которые должны быть заполнены из некоторых ячеек на каком-то листе. Часть, где я отношусь к листам и ячейкам, понятна. Но я не понимаю, как заполнить 500 + текстовые поля, не ссылаясь на них один за другим.VBA Заполнение 500 + текстовых полей

Я не хочу, чтобы это сделать:

Textbox1.value = sheet1.cells(x,y) 
Textbox2.value = sheet1.cells(x+1,y) 
. 
. 
. 

Я хочу, чтобы это сделать:

Textbox(x).value = sheet1.cells(x,y) 

Конечно в цикле

Я попытался:

Private Sub UserForm_Activate() 

Dim s As String 
Dim m As Integer 
Dim k As Integer 
Dim l As Integer 

s = "TextBox1" 


For k = 1 To 10 


s.Value = Sayfa9.Cells(l, m) 
s = Replace(s, k, k + 1) 
m = m + 1 

Next k 
end sub 

Конечно, s.Value ошибочно. Как мне это сделать?

+0

возможно дубликат [Перебор несколько командных кнопок, чтобы изменить их свойства на основе значений ячеек] (http://stackoverflow.com/questions/25266267/looping-through-multiple-command-buttons-to-change -their-properties-based-on-cel) ... и [Цитирование через многие ComboBoxes по имени] (http://stackoverflow.com/questions/25282385/looping-through-many-comboboxes-by-name). Тот же принцип применяется к TextBoxes. –

+0

Нет, его нет. Как вы можете видеть, есть способы более простые способы, чем то, что, как говорят, дублируют. – user3146025

ответ

0

Если у вас есть фиксированное количество Textboxes, вы можете использовать следующий код:

Private Sub UserForm_Activate() 
    Dim i As Integer 
    Dim j As Integer 
    j = 1    'set it to the required column number 
    For i = 1 To 500 'set 500 to the maximum no. of textboxes 
     Controls("TextBox" & i).Value = ThisWorkbook.Sheets("Sheet1").Cells(i, j) 
    Next i 
End Sub 
+0

Спасибо! Вот код, который я модифицировал: – user3146025

0

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

Как так:

Private Sub UserForm_Activate() 
y = 1 
For Each oControl In Me.Controls 
    If oControl.Name Like "TextBox*" Then 
    x = Right(oControl.Name, Len(oControl.Name) - 7) 'TextBox123 
                '1  7 10=Len() 
    oControl.Value = ThisWorkbook.Sheets(1).Cells(x, y) 
    End If 
Next 
End Sub 
-1

Вы можете получить доступ к каждому текстовое поле в качестве члена worksheet.shapes.item.

Следующий код может присваивать значениям ячеек (x, y), ячеек (x + 1, y) ... в текстовые поля на рабочем листе.

Sub SetValueToTextboxes(x,y) 
 Dim i As Integer, dim j as Integer 

 With ActiveSheet.Shapes 
    j=0 
    For i = .Count To 1 Step -1 
   If .Item(i).Type = msoTextBox Then 'set data if the shape is 'textbox' 
      .Item(i).TextFrame.Characters.Text = .cells(x+j,y).value 
     j=j+1 
  End If 
    Next i 
    End With 
End Sub 

Надеюсь, вы можете получить представление об обработке текстовых полей.

0

Вот код я модифицированный для моих потребностей. Спасибо Раск и Аксель. Ответ Акселя имеет намного больше глубины. Я уверен, что буду использовать его в качестве основы позже. Ответ Фуму также выглядит глубоко. Спасибо вам всем.

Private Sub UserForm_Activate() 

Dim i As Integer 
Dim j As Integer 
Dim k As Integer 



j = 138    'set it to the required column number 
k = 19 
For i = 1 To 187 'set 500 to the maximum no. of textboxes 

     If j = 149 Then 
     j = 138 'this resets the column number to beginning 
      If k = 30 Then k = 37 'this skips the gap in the table 
     k = k + 1 'this incements the row number to the next row 
     End If 

    Controls("TextBox" & i).Value = Sheet9.Cells(k, j) 
    j = j + 1 'this increment column number to next 



Next i 


End Sub 
Смежные вопросы