Userform输入到特定单元格并从VBA中向下移动

时间:2015-07-03 17:20:25

标签: excel vba excel-vba

我是VBA的初学者,我一直有这个问题。我有一个工作表,我需要UserForm将客户端名称输入到特定的单元格。名字应该去的单元格是" B3"。当用户提交信息时,表单应该清除,下一个客户端应该在" B4",依此类推。问题是我不能使用下一行选项,因为下一行已经填写并且需要保持这样。有没有办法开始" B3"每次用户输入时,在最后一个单元格中添加一个?谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

根据您要执行此操作的方式,您可以使用从B3开始的循环检查它是否为空。如果它是空的,则放置信息,如果不是,则将1递增到下一行并检查该行。循环直到找到一个空单元格。另一种方法,如果你知道行将是统一填充是简单地使用函数ActiveSheet.UsedRange.Rows.Count这将给你最后一行数据的行号,然后只需添加1

基本上是:

Private Sub CommandButton1_Click()

Dim I As Long

Sheets("Sheet1").Activate
ActiveSheet.Range("B3").Activate

Do While IsEmpty(ActiveCell.Offset(I, 0)) = False
    I = I + 1
Loop

ActiveCell.Offset(I, 0).Value = ComboBox1.Value

End Sub

答案 1 :(得分:0)

您可以使用Ranga对象的End方法。我的意思是,如果你使用set rng = Range(“E3”)。End(xlDown)为你提供行中下一个使用过的单元格,但你检查rng.Row是否是Cells.Rows.Count(1.048.576)if下面的所有单元格都是空的

答案 2 :(得分:0)

我刚刚在一个带有单个文本框的基本用户窗体上尝试过此操作,因此需要稍加修改以满足您的需求。

Private Sub TextBox1_Change()
    Application.EnableEvents = False
    Cells(LastRow("Sheet1", "B") + 1, 2).Value = TextBox1.Value
    TextBox1.Value = ""
    Application.EnableEvents = False    
End Sub

Public Function LastRow(SheetName As Variant, Col As Variant) As Long
    Application.Volatile True

    With ThisWorkbook.Sheets(SheetName)
        If .Cells(.Rows.Count, Col).Value <> "" Then
            LastRow = .Rows.Count
            Exit Function
        End If
        LastRow = .Cells(.Rows.Count, Col).End(xlUp).Row
    End With
End Function

另外,请勿使用UsedRange查找最后一行。见Error in finding last used cell in VBA