【问题标题】:combining multiple userform textbox values into one cell将多个用户表单文本框值组合到一个单元格中
【发布时间】:2016-08-30 12:03:38
【问题描述】:

我有一个已填写并在电子表格中输入数据的用户表单。 我添加的一个功能是 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

【问题讨论】:

    标签: excel textbox userform vba


    【解决方案1】:

    遍历所有文本框并检查其值:

    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
    

    代码未经测试。

    【讨论】:

      【解决方案2】:

      阿威尔,试试这样的。它应该满足您的需求,并且是非常灵活的代码。您无需为每个组合都创建一个 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
      

      【讨论】:

      • 我无法让它工作,它标记了第一个没有 For 的 Next,然后是 Else 脚本。
      • 我不知道我为什么这样做。我更新了代码,尝试运行这个版本。很抱歉@Awill。
      猜你喜欢
      • 2019-08-15
      • 2014-12-31
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多