VBA 在下一个空白行正确输入用户表单数据
VBA Entering userform data at next blank row correctly
- 创建了一个用户表单
- 添加了一个文本框和一个组合框
- 添加了提交按钮
- 点击提交后,它会将数据添加到电子表格
据我所知和阅读的内容,这是错误的
ActiveCell.Value = TextBox3.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox1.Text
ActiveCell.Offset(1, -1).Select
这有效,但 I've been told I shouldn't use the .select keyword when possible。我读过要使我的代码可重用,我应该创建变量。专业开发者怎么写这段代码,能不能少写几行,不用select怎么引用activecell的偏移量?
您要避免使用 ActiveCell 的主要原因是,如果用户在执行代码时 select 另一个单元格,它可能会产生意想不到的结果。
如果您的目标是始终将控件的内容写入相同的单元格,您可能希望首先定义一个 Range 类型的变量并设置相对于该变量的偏移量。
例如:
Dim myCell as Range
Set myCell = ThisWorkbook.Sheets(1).Range("C4")
myCell.Value = TextBox3.Text
myCell.Offset(0, 1).Value = ComboBox1.Text
'[...]
我假设您希望在 A 列中使用 TextBox3
,在 B 列中使用 ComboBox1
。如果您需要不同的列,只需更改字母引用即可。
Sub OnClick() 'whatever your current sub is called.
Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("Name of Sheet where data is going")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row
ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row
ws.Range("B" & LastRow).Value = ComboBox1.Text 'Adds the ComboBox1 into Col B & Last Blank Row
End Sub
如果您想要使用 Offset()
的方法:
Sub OnClickwithOffset() 'whatever your current sub is called.
Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("Name of Sheet where data is going")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row
ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row
ws.Range("A" & LastRow).Offset(0, 1).Value = ComboBox1.Text 'Adds the ComboBox1 into next cell to the right of TextBox3 data.
End Sub
- 创建了一个用户表单
- 添加了一个文本框和一个组合框
- 添加了提交按钮
- 点击提交后,它会将数据添加到电子表格
据我所知和阅读的内容,这是错误的
ActiveCell.Value = TextBox3.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox1.Text
ActiveCell.Offset(1, -1).Select
这有效,但 I've been told I shouldn't use the .select keyword when possible。我读过要使我的代码可重用,我应该创建变量。专业开发者怎么写这段代码,能不能少写几行,不用select怎么引用activecell的偏移量?
您要避免使用 ActiveCell 的主要原因是,如果用户在执行代码时 select 另一个单元格,它可能会产生意想不到的结果。
如果您的目标是始终将控件的内容写入相同的单元格,您可能希望首先定义一个 Range 类型的变量并设置相对于该变量的偏移量。
例如:
Dim myCell as Range
Set myCell = ThisWorkbook.Sheets(1).Range("C4")
myCell.Value = TextBox3.Text
myCell.Offset(0, 1).Value = ComboBox1.Text
'[...]
我假设您希望在 A 列中使用 TextBox3
,在 B 列中使用 ComboBox1
。如果您需要不同的列,只需更改字母引用即可。
Sub OnClick() 'whatever your current sub is called.
Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("Name of Sheet where data is going")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row
ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row
ws.Range("B" & LastRow).Value = ComboBox1.Text 'Adds the ComboBox1 into Col B & Last Blank Row
End Sub
如果您想要使用 Offset()
的方法:
Sub OnClickwithOffset() 'whatever your current sub is called.
Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("Name of Sheet where data is going")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row
ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row
ws.Range("A" & LastRow).Offset(0, 1).Value = ComboBox1.Text 'Adds the ComboBox1 into next cell to the right of TextBox3 data.
End Sub