Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 错误运行时91和429_Vba_Excel_Runtime Error - Fatal编程技术网

Vba 错误运行时91和429

Vba 错误运行时91和429,vba,excel,runtime-error,Vba,Excel,Runtime Error,这段代码感觉像是薛定谔在执行它。如果我打开项目并运行代码,我将不会得到任何错误。如果我查看代码以编辑或添加任何内容,第一次运行代码时,我会得到“运行时错误91”。若我再次尝试运行它,不做任何更改,我会得到“运行时错误429”,ActiveX组件无法创建对象 我试图实现的是在工作表Ref的范围内找到行BuildSel,该行的值与userform BuildList的列表中选择的值相同。然后,一旦找到该行,从该行以及A列和B列中获取数据,并将它们放在我的userform上的textbox中。我的代码

这段代码感觉像是薛定谔在执行它。如果我打开项目并运行代码,我将不会得到任何错误。如果我查看代码以编辑或添加任何内容,第一次运行代码时,我会得到“运行时错误91”。若我再次尝试运行它,不做任何更改,我会得到“运行时错误429”,ActiveX组件无法创建对象

我试图实现的是在工作表Ref的范围内找到行BuildSel,该行的值与userform BuildList的列表中选择的值相同。然后,一旦找到该行,从该行以及A列和B列中获取数据,并将它们放在我的userform上的textbox中。我的代码是否正确,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”更改为variant可以使其工作,但当前的代码在没有找到匹配列表项时没有错误检查

以下代码应该更适合使用:

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

BuildSel的定义不正确。应该说Dim BuildSel作为变体,我想把它作为我自己问题的答案,但是因为我不能解释为什么它解决了这个问题,也不想把我的代码作为正确代码的一个好例子来推广,我将把它作为一个注释放在这里。我将把这个问题留给版主来决定它是否对其他人有帮助。Thakns Flephal为您提供更高效的代码。事实上,这将实现我想要的,不会留下任何错误的余地。我要把我的代码改成你建议的代码,因为我的代码行很乱。BuildSel永远不应该什么都不是,但我想,自从我出错以来,情况可能就不是这样了。谢谢你的帮助!!