使用输入表单上的文本框设置一行中单元格的值

Set the value of cells in a row using textboxes on input form

我正在尝试在 Excel 中创建一个输入表单,它根据多个文本框设置一行中的单元格值:

我设法磨出了一些有用的东西,但它看起来很笨重。我最终可能会得到 n 行(可能有数百行)。编辑或排除故障会很痛苦。

我不知道如何将每个文本框指向每个新行中的正确单元格。

如何将此代码从 n 行减少到固定数量?

Private Sub CommandButton1_Click()

Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim n As Long
Dim LastRow As Long

n = sh.Range("A" & Application.Rows.Count).End(xlUp).Row
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
   
sh.Range("A" & n + 1).Value = Me.TextBox1.Value
sh.Range("B" & n + 1).Value = Me.TextBox2.Value
sh.Range("C" & n + 1).Value = Me.TextBox3.Value
sh.Range("D" & n + 1).Value = Me.TextBox4.Value
sh.Range("E" & n + 1).Value = Me.TextBox5.Value
sh.Range("F" & n + 1).Value = Me.TextBox7.Value
sh.Range("G" & n + 1).Value = Me.TextBox8.Value
sh.Range("H" & n + 1).Value = Me.TextBox9.Value
sh.Range("I" & n + 1).Value = Me.TextBox10.Value
sh.Range("J" & n + 1).Value = Me.TextBox11.Value

End Sub

也许类似于循环预定义数组:

Private Sub CommandButton1_Click()

Dim sh As Worksheet: Set sh = ThisWorkbook.Sheets("Sheet1")
Dim arr As Variant: arr = Evaluate("=""TextBox""&ROW(1:11)")
Dim lr As Long

With sh
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    For Each el In arr
        .Cells(lr + 1, Replace(el, "TextBox", "") * 1) = Me.Controls(el).Value
    Next
End With

End Sub

您还可以决定遍历所有 UserForm.Controls 并检查它们的 TypeName 属性:

Private Sub CommandButton1_Click()

Dim sh As Worksheet: Set sh = ThisWorkbook.Sheets("Sheet1")
Dim ctrl As Control, lr As Long

With sh
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "TextBox" Then
            .Cells(lr + 1, Replace(ctrl.Name, "TextBox", "") * 1) = ctrl.Value
        End If
    Next
End With

End Sub

但是对于这个示例,您将遍历所有控件,而这可能并不需要。