Несколько значений текстового поля в одну ячейку - PullRequest
0 голосов
/ 25 марта 2019

У меня есть пользовательская форма, внутри пользовательской формы есть фрейм с 4-мя текстовыми полями, как мне передать значения этих 4-х текстовых полей в одну ячейку?разделенные запятой или пробелом.

Я попытался сделать следующее в моей кнопке отправки.

Dim t As MSForms.Control

For Each t In Me.Frame1.Controls
    If TypeOf t Is MSForms.TextBox Then
        If IsEmpty(stCode1Box) Then
        Exit For
        End If

        If stCode1Box Is Nothing Then
           'Cells(emptyRow, 15).Value = stCode1Box.Value
        ElseIf Not IsEmpty(stCode1Box) Then
           Cells(emptyRow, 15).Value = stCode1Box.Value
        ElseIf stCode2Box Is Nothing Then
           'Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value
        ElseIf Not IsEmpty(stCode2Box) Then
           Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value
        ElseIf stCode3Box Is Nothing Then
           'Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value & ", " & stCode3Box.Value
        ElseIf Not IsEmpty(stCode3Box) Then
           Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value & ", " & stCode3Box.Value
        ElseIf stCode4Box Is Nothing Then
           'Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value & ", " & stCode3Box.Value & ", " & stCode4Box.Value
        ElseIf Not IsEmpty(stCode4Box) Then
           Cells(emptyRow, 15).Value = stCode1Box.Value & ", " & stCode2Box.Value & ", " & stCode3Box.Value & ", " & stCode4Box.Value

        End If
    End If
Next t

Результат отобразится в этой ячейке, и если значение будет иметь несколько текстовых полей, этобудет разделен запятой ",".

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Непроверенные:

Dim t As MSForms.Control, v
v = ""
For Each t In Me.Frame1.Controls
    If TypeOf t Is MSForms.TextBox Then
        v = v & iif(v <> "", "," , "") & Trim(t.Value)
    End If
Next t
Cells(emptyRow, 15).Value = v
0 голосов
/ 25 марта 2019

Вы можете зациклить ваши элементы управления, как у вас уже есть, но вместо того, чтобы иметь последовательность операторов if ... elseif, вы можете проверить, является ли texbox.value не "", добавить значение в массив, а затем присоединиться к массиву. разделены тем, что вам нравится.

См. Мой пример ниже, который записывает ваши значения в ячейку C5 на Sheet1, предполагая, что у вашего userform есть commandbutton с именем cmdSubmit (это будет работать для любого числа textboxes):

Пример

Private Sub cmdSubmit_Click()

    Dim temp As Variant
    Dim c As Control
    Dim myCount As Long

    '0 based array starting with a single element
    ReDim temp(0 To 0)
    myCount = 0

    'Check each control for a textbox
    For Each c In Me.Frame1.Controls
        If TypeOf c Is MSForms.TextBox Then
            'if there is a value in the texbox then assign it to an array
            If c.Value <> "" Then
                temp(myCount) = c.Value
                myCount = myCount + 1
                'set upperbound of the array +1 when a new value is found
                ReDim Preserve temp(0 To UBound(temp) + 1)
            End If
        End If
    Next c
    myCount = 0

    'Remove the last array element as it must be blank
    ReDim Preserve temp(0 To UBound(temp) - 1)

    'Create a string of each value joined with a comma and space
    Dim myString As String
    myString = Join(temp, ", ")

    ThisWorkbook.Sheets(1).Range("C5").Value = myString

End Sub

Ссылки

  1. Функция массива
  2. Функция соединения
0 голосов
/ 25 марта 2019

Попробуйте просто

Cells(emptyRow, 15).Value = Cells(emptyRow, 15).Value & "," & stCode1Box.Value
...