2015-05-11 72 views
1

因此,我目前正在尝试让用户输入一些信息,并根据下拉列表中的值选择特定范围内的信息。例如,我选择了星期一,因此我希望信息在范围A1:A12中进行,但是如果他们选择了星期二,那么请转到范围G1:G12。另外,如果范围已经满了数据,我想让它告诉用户它已满。不要有任何示例代码,但这里是一个伪代码示例Excel VBA用户表单输入到工作表内的特定范围

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或某物,以查看该范围是否已满数据。提前致谢!

+0

你有什么问题? – user1274820

+0

做检查,看看细胞的范围是否已经满了。 – OysterMaker

+0

'如果单元格(X + 1,Y + 1)<> vbNullString那么''单元格中有数据。它也可能是一个空格,所以它可能值得使用'Trim(Cells(X + 1,Y + 1))',但这取决于你我想 - 无论空格=数据或者你会找到那个和什么依赖于的因素。 – user1274820

回答

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 

您应该避免使用选择尽可能多地。

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

+1

确定这样,如果小区具有内容,该怎么办我让代码跳到下一行?我在猜测像'Cells(lastrow2 + 2,1)?' – OysterMaker

+0

我为你编辑 - 看起来你已经跳到你的代码的下一行。 .End(xlDown)将获取包含数据的最后一个单元格。如果添加到它,它应该始终是空白的。合理? – user1274820

+1

有道理,现在我猜如果我想在范围满时向用户出错,我可以开始一个计数并检查if语句吗? – OysterMaker

相关问题