VBA正确input下一个空行的用户表单数据

  1. 创build一个用户表单
  2. 添加了一个文本框和一个combobox
  3. 添加了一个提交button
  4. 点击提交后,会将数据添加到电子表格中

从我所知道的和我所读到的是错误的

ActiveCell.Value = TextBox3.Text ActiveCell.Offset(0, 1).Select ActiveCell.Value = ComboBox1.Text ActiveCell.Offset(1, -1).Select 

这工作,但我已经被告知我不应该使用.select关键字时尽可能 。 我读过,使我的代码可重用,我应该创buildvariables。 专业开发人员如何编写这些代码,是否可以用较less的行编写,如何在不使用select的情况下引用activecell偏移?

我假设你想在列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的主要原因是,如果用户在代码执行时select另一个单元,则可能会产生意外的结果。

如果您的目标是始终将您的控件的内容写入相同的单元格,您可能希望首先定义一个Rangetypes的variables,并设置相对于该variables的偏移量。

例如:

 Dim myCell as Range Set myCell = ThisWorkbook.Sheets(1).Range("C4") myCell.Value = TextBox3.Text myCell.Offset(0, 1).Value = ComboBox1.Text '[...]