Excel VBA用户表单input到工作表内的特定范围

所以我目前正在尝试让用户input一些信息,并根据下拉列表中的值select特定的范围。 例如,我select星期一,所以我想要的信息在范围A1:A12,但如果他们select星期二,然后去范围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 

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

我会回答,所以我可以更好地演示代码。

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

 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。

根据我的经验,只有在显示不同的纸张时才需要。