Excel VBA用户表单:搜索现有号码并选择行

Excel VBA用户表单:搜索现有号码并选择行,excel,vba,Excel,Vba,我有一张excel表格,上面有客户的数据。 我创建了一个userform,它允许我输入并保存所有信息 现在,我希望userform检查列A(customer nº),如果userform的customer nº已经在其中,我希望它选择该行作为活动行/单元格。 如果不是,我希望活动单元格是A列中的第一个空单元格 到目前为止,我已经尝试了很多(例如,if&elseif,…),但似乎没有任何效果 有人能帮我吗?非常感谢,祝你今天愉快 编辑:这是我的最新尝试: For i = 3 To 300000 w

我有一张excel表格,上面有客户的数据。 我创建了一个userform,它允许我输入并保存所有信息

现在,我希望userform检查列A(customer nº),如果userform的customer nº已经在其中,我希望它选择该行作为活动行/单元格。 如果不是,我希望活动单元格是A列中的第一个空单元格

到目前为止,我已经尝试了很多(例如,if&elseif,…),但似乎没有任何效果

有人能帮我吗?非常感谢,祝你今天愉快

编辑:这是我的最新尝试:

For i = 3 To 300000
wert = "A" & i
If Range(wert).Value = custno Then
ActiveCell = wert

ElseIf wert = "" Then
ActiveCell = Range(wert).Offset(1, 0)
End If
Next
测试以下代码:

编辑(即使不是优化的解决方案):

Sub myTest()
lastRow=单元格(Rows.Count,1).End(xlUp).Row
找到=0
i=1
当发现=0且我使用此

Dim f As Range
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) ' reference all column A cells from row 1 down to last not empty one
    Set f = .Find(what:=Me.custno, LookIn:=xlValues, lookat:=xlWhole) ' try finding 'custno'
    If f Is Nothing Then 'if unsuccessful
        .Cells(1, 1).End(xlDown).Offset(1).Activate ' activate the first not empty cell
    Else 'else
        f.Activate ' activate found cell
    End If
End With

如果您发布到目前为止尝试过的内容,我们可以帮助您解决代码中的问题。您不能像这样“设置”ActiveCell-您需要
范围(wert)。激活
单元格(Rows.Count,1)。结束(xlUp)。Row
从底部获取最后一个非空单元格行索引,即此单元格和第一行之间可能有其他空单元格,虽然OP希望“列A中的第一个空单元格”也可以,但它并没有按照我的预期工作,因为我之前和之后还有几行,所以我不能使用“Exit Sub”。有没有其他方法可以在第一部分正确后立即用空单元格跳过第二部分?@spqx,有任何反馈?不幸的是,这不起作用。我没有收到任何错误,但是userform中的更改不会保存在表中。您的问题不是要保存在工作表中的userform中的任何更改。这是关于选择工作表中与某个userform控件值相关的单元格是的,你是对的。代码的第二部分是关于将userform输入写入活动列。我又测试了一次,你的代码没有选择一个空的或用过的单元格,它一直停留在A1。单步执行:在带有范围(“A1”,…”的行上放置一个断点(按F9),一旦执行停止,按F8单步执行后续代码行,并在即时窗口中查询相关变量(按CTRL-G弹出),例如键入“?Me.custno”并按return键查看其当前值
Dim f As Range
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) ' reference all column A cells from row 1 down to last not empty one
    Set f = .Find(what:=Me.custno, LookIn:=xlValues, lookat:=xlWhole) ' try finding 'custno'
    If f Is Nothing Then 'if unsuccessful
        .Cells(1, 1).End(xlDown).Offset(1).Activate ' activate the first not empty cell
    Else 'else
        f.Activate ' activate found cell
    End If
End With