使用输入表单上的文本框设置一行中单元格的值
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
但是对于这个示例,您将遍历所有控件,而这可能并不需要。
我正在尝试在 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
但是对于这个示例,您将遍历所有控件,而这可能并不需要。