运行时错误 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
这段代码感觉就像是薛定谔在执行。如果我打开项目和 运行 代码,我根本不会收到任何错误。如果我查看代码以编辑或添加任何内容,我第一次 运行 代码时,我得到 '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