Vba 错误运行时91和429
这段代码感觉像是薛定谔在执行它。如果我打开项目并运行代码,我将不会得到任何错误。如果我查看代码以编辑或添加任何内容,第一次运行代码时,我会得到“运行时错误91”。若我再次尝试运行它,不做任何更改,我会得到“运行时错误429”,ActiveX组件无法创建对象 我试图实现的是在工作表Ref的范围内找到行BuildSel,该行的值与userform BuildList的列表中选择的值相同。然后,一旦找到该行,从该行以及A列和B列中获取数据,并将它们放在我的userform上的textbox中。我的代码是否正确,ActiveX是否出错?我也为糟糕的编码道歉 编辑:列表框位于我的用户表单的多页上。我第一次注意到这个问题是在今天我尝试在另一个页面上添加另一个列表框时Vba 错误运行时91和429,vba,excel,runtime-error,Vba,Excel,Runtime Error,这段代码感觉像是薛定谔在执行它。如果我打开项目并运行代码,我将不会得到任何错误。如果我查看代码以编辑或添加任何内容,第一次运行代码时,我会得到“运行时错误91”。若我再次尝试运行它,不做任何更改,我会得到“运行时错误429”,ActiveX组件无法创建对象 我试图实现的是在工作表Ref的范围内找到行BuildSel,该行的值与userform BuildList的列表中选择的值相同。然后,一旦找到该行,从该行以及A列和B列中获取数据,并将它们放在我的userform上的textbox中。我的代码
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永远不应该什么都不是,但我想,自从我出错以来,情况可能就不是这样了。谢谢你的帮助!!