2016-08-30 4 views
0

У меня есть пользовательская форма, которая заполняется и вводит данные в электронную таблицу. Одна из возможностей, которую я добавил, представляет собой фрейм из 10 текстовых полей, которые остаются скрытыми, если данные не введены в предыдущем поле, что позволяет до 10 записей. Поскольку пользователь вводит имена участников в эти текстовые поля, я хочу, чтобы все они заполнили одну и ту же ячейку электронной таблицы, разделенные запятыми. Сначала я ввел код, не задумываясь, и получал бы 9 запятых в ячейке, даже если имена не были добавлены. С тех пор мне удалось получить второе значение текстового поля, которому предшествует запятая, добавленная в ячейку, но не может получить значение любых дополнительных текстовых полей (3-10), чтобы сделать то же самое.объединение нескольких значений текстового поля пользовательской формы в одну ячейку

ws.Range("I" & LastRow).Value = tbPart1.Value 
If Not IsEmpty(tbPart2.Value) Then 
ws.Range("I" & LastRow).Value = tbPart1.Value & "," & tbPart2.Value 
ElseIf Not IsEmpty(tbPart3.Value) Then 
ws.Range("I" & LastRow).Value = tbPart1.Value & "," & tbPart2.Value & "," & tbPart3.Value 

End If 

ответ

2

Перебор всех Textboxes и проверки его значения:

Dim i As Integer 

For i = 1 To 10 

    'Loop through all 10 Textboxes and add its value to the cell 
    If Not Controls("tbPart" & i).Value = "" Then 

     'Check if cell is empty 
     If ws.Range("I" & LastRow).Value = "" Then 
      ws.Range("I" & LastRow).Value = Controls("tbPart" & i).Value 
     Else 
      ws.Range("I" & LastRow).Value = _ 
      ws.Range("I" & LastRow).Value & ", " & Controls("tbPart" & i).Value 
     End if 
    End If 
Next i 

код не проверяется.

+0

работает отлично – Awill

0

Прошу, попробуйте что-то вроде этого. Он должен соответствовать вашим потребностям, и это довольно гибкий код. Вместо того, чтобы делать оператор If Then для каждой комбинации, вы можете просто прокрутить все текстовые поля и заполнить свой лист более элегантно.

Dim ctrl As Control 
Dim ctrlName As String, ctrlNum As Integer 

For Each ctrl In Me.Controls 'Loops through all controls on the Userform 
    If TypeName(ctrl) = "TextBox" Then 'Only acknowledges TextBox Controls 
     ctrlName = ctrl.Name 
     ctrlNum = CInt(Replace(ctrlName, "tbPart", "")) 'Names each textbox by number 
     If ctrlNum > 0 And ctrlNum < 11 And ctrl.Value <> "" Then 'cycles through textboxes 1-10 
      If ws.Range("I" & NextRow).Value <> "" Then 'If cell isn't blank, preclude with comma 
       ws.Range("I" & NextRow).Value = ws.Range("I" & NextRow).Value & ", " & ctrl.Text 
      Else: ws.Range("I" & NextRow).Value = ctrl.Text 'otherwise value only 
      End If 
     End If 
    End If 
Next ctrl 
+0

я не мог получить эту работу, он был маркировки первый Далее без For, а затем Else сценариев. – Awill

+0

Я не знаю, почему я это сделал. Я обновил код, попробовал запустить эту версию. Извините, что @Awill. – Tyeler