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

时间:2015-01-05 16:31:57

标签: excel vba excel-vba

  1. 创建了用户表单
  2. 添加了一个textBox和一个comboBox
  3. 添加了提交按钮
  4. 点击提交后,会将数据添加到电子表格
  5. 从我被告知的内容和我所读到的内容来看,这是错误的

    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偏移量?

2 个答案:

答案 0 :(得分:12)

我假设你想要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

答案 1 :(得分:0)

您希望避免使用ActiveCell的主要原因是,如果用户在代码执行时选择另一个单元格,它可能会产生意外结果。

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

E.g:

Dim myCell as Range

Set myCell = ThisWorkbook.Sheets(1).Range("C4")
myCell.Value = TextBox3.Text
myCell.Offset(0, 1).Value = ComboBox1.Text

'[...]