运行时错误 91 和 429

Error runtime 91 and 429

这段代码感觉就像是薛定谔在执行。如果我打开项目和 运行 代码,我根本不会收到任何错误。如果我查看代码以编辑或添加任何内容,我第一次 运行 代码时,我得到 'Run-time error 91'。如果我第二次尝试 运行 它,不做任何更改,我会得到 'Run-time error 429'(ActiveX 组件无法创建对象)。

我想要实现的是在工作表 (Ref) 的范围内找到与用户窗体 (BuildList) 的列表中选择的值相同的行 (BuildSel)。然后,一旦找到该行,就从该行以及 A 列和 B 列中获取数据,并将它们放入我的用户窗体上的文本框中。我的代码是否正确,ActiveX 是否出错?我也为糟糕的编码道歉。

编辑:列表框位于我的用户表单的多页上。我是今天第一次注意到这个问题,当时我尝试在不同的页面上添加另一个列表框。

Private Sub BuildList_Click()
    Dim Ref As Worksheet, BuildSel As Long

    Set Ref = ThisWorkbook.Sheets("Ref")

    BuildSel = Ref.Range("B2", Ref.Range("B" & Rows.Count).End(xlUp)).Find(BuildList.Value, lookat:=xlPart).Row
    BuilderText.Value = Ref.Range("A" & BuildSel).Value
    CompNameText.Value = Ref.Range("B" & BuildSel).Value
End Sub

不确定为什么将 'BuildSel' 更改为变体后它会起作用,但是当找不到匹配的列表项时,现有代码没有错误检查

下面的代码应该更适合使用:

Private Sub BuildList_Click()
    Dim Ref As Worksheet: Set Ref = ThisWorkbook.Sheets("Ref")
    Dim BuildSel As Range
    With Ref
        Set BuildSel = .Range("B2", .Range("B" & Rows.Count).End(xlUp)).Find _
            (BuildList.Value, lookat:=xlPart)
        If Not BuildSel Is Nothing Then
            BuilderText.Value = .Range("A" & BuildSel.Row).Value
            CompNameText.Value = .Range("B" & BuildSel.Row).Value
        Else
            BuilderText.Value = ""
            CompNameText.Value = ""
        End If
    End With
End Sub