我是一个vba新手,目前正在Excel中设计一些自动化矩阵系统。我在工作表中尝试了两组代码,它运行得很好。但是,当我试图在用户窗体的事件子控件中使用相同的代码时,弹出了一个错误91,并在orivalue
中显示了一个错误。虽然我已经给它赋值了。2我也会根据编译器高亮显示调试行。
下面是函数的代码。
Function find_prevconfig(x2 As Integer) As Range
For y = 0 To 30
If Range("E590").Offset(y, x2) = "Y" Then
Set find_preconfig = Range("C590").Offset(y, 0)
Exit Function
End If
Next y
End Function
下面是我调用函数的event sub:
Private Sub btn_confirm_Click()
Dim orivalue As Range
Dim i As Integer
For i = 0 To 30
If Range("E26").Offset(0, i).Value = Range("J6").Value Then
Set orivalue = find_prevconfig(i)
MsgBox (orivalue)
End If
Next i
End Sub
调试行是MsgBox (orivalue)
,因为它说orivalue = nothing
。您的帮助和建议真的很感谢!
1条答案
按热度按时间carvr3hs1#
未设置对象变量或With块变量”或错误“91”
有几件事我将解决。
**1.**关于此错误,您需要在使用之前检查对象是否存在。例如
行
MsgBox (orivalue)
应写为**2.**即使条件为True,您的对象
find_prevconfig
也将始终为Nothing
。这是由于输入错误。函数名为find_prevconfig
,但您使用的是find_preconfig
。建议始终使用Option Explicit
**3.**完全限定您的对象。在代码中,如果不这样做,则它将引用活动工作表,并且活动工作表可能不是您所期望的工作表。例如
ThisWorkbook.Sheets("Sheet1").Range("E590").Offset(y, x2)
**4.**尽管
.Value
是赋值或阅读值时的默认属性,但建议显式使用它。我个人认为这是一个好习惯。这将帮助您在将来快速浏览代码时避免许多麻烦。Set rng = Range("SomeRange")
与SomeValue = Range("SomeRange").Value
或SomeValue = Range("SomeRange").Value2
**5.**在进行字符串比较时,建议考虑字符串可以包含空格或大小写不同。
"y"
不等于"Y"
。同样,"Y "
不等于"Y"
。如果需要,可以使用TRIM
和UCASE
来实现此目的,如下面的代码所示。您的程式码可以写成(UNTESTED)