Excel VBA用户表单条目到工作表

时间:2015-05-11 18:10:40

标签: excel vba excel-vba

所以我目前正在尝试让用户输入一些信息,并根据选择下拉列表中的值将该信息放在特定范围内。例如,我选择星期一,所以我希望信息进入范围A1:A12,但如果他们选择星期二,则进入范围G1:G12。

此外,如果范围已满数据,我希望它告诉用户它已满。没有任何示例代码,但这是一个伪代码示例

Private Sub cbSubmit_Click()
    range("A2").Select
    ActiveCell.End(xlDown).Select
    lastrow = ActiveCell.Row
    MsgBox lastrow
        If ComboBox1.Value = "Monday" Then
        Cells(lastrow + 1, 1).Value = tb1.Text
        Cells(lastrow + 1, 2).Value = tb2.Text
    End If
    If ComboBox1.Value = "Tuesday" Then
        range("G2").Select
        ActiveCell.End(xlDown).Select
        lastrow2 = ActiveCell.Row
        Cells(lastrow2 + 1, 1).Value = tb1.Text
        Cells(lastrow2 + 1, 2).Value = tb2.Text
    End If
End Sub

另外,在上面的代码中,有没有更好的方法来查找空白范围内的最后一个单元格?这个只有在范围内已有数据且情况并非总是如此时才有效。 并检查某种CountA或其他东西,看看范围是否已经充满了数据。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我会回答,这样我可以更好地展示代码。

正如我在评论中所说,如果你想检查一个范围内的每个值,你可以这样做:

Dim c
For Each c in Range("A1:A10") 'Whatever your range to check is
    If c <> vbNullString Then
        'Found Data - not empty
        Exit For
    End If
Next

如果你只是检查2个单元格,你应该只使用:

If Cells(lastrow2 + 1, 1) <> vbNullString and Cells(lastrow2 + 1, 2) <> vbNullString

如果您只是想将数据添加到列表底部,那么您的代码已经到了最后一行并添加到它...所以每次调用它时都会这样:

ActiveCell.End(xlDown).Select
lastrow2 = ActiveCell.Row

它是最后一行,其余的代码将它添加到最后。

还有一件事。你应该真的取代它:

range("G2").Select
ActiveCell.End(xlDown).Select
lastrow2 = ActiveCell.Row

有了这个:

lastrow2 = range("G2").End(xlDown).Row

您应该尽量避免使用select。

根据我的经验,只有在显示不同的工作表时才需要。