EXCEL VBA - 对象变量或未设置块变量
Posted
技术标签:
【中文标题】EXCEL VBA - 对象变量或未设置块变量【英文标题】:EXCEL VBA - Object Variable or With Block Variable Not Set 【发布时间】:2017-07-11 10:14:52 【问题描述】:我目前正在开发一个函数,该函数将根据我拥有的字符串输入搜索行号。但是,在以下函数中,我得到了标题中所述的错误,我不知道该怎么做:L
这里是查找行函数
Function MPNTRowECU(ByVal ECUVariantName) As Range
Debug.Print ECUVariantName
Dim wsMPNT As Worksheet
Set wsMPNT = Worksheets("Module Part Number Tracker")
MPNTRowECU = wsMPNT.Range("C:C").Find(What:=ECUVariantName, LookIn:=xlValues, SearchOrder:=xlByRows)
End Function
Debug.Print 行用于确保 ECUVariantName 确实是一个字符串,并且它确实返回了我每次都拥有的字符串。在 MPNTRowECU 是我得到错误的地方。有什么建议吗?对 VBA 相当陌生
【问题讨论】:
您需要将Set
与对象变量一起使用:Set MPNTRowECU =
@Rory 啊,看到我之前做过,但我遇到了一些其他错误,这就是为什么我很困惑并问了这个问题。谢谢!
【参考方案1】:
尝试下面的函数代码,而不是返回 Range
,我修改了您的 Function
以返回 Row
号码(如您的帖子中所述)。
此外,您需要使用If Not MPNTRng Is Nothing Then
标准确保Find
是成功的。
代码
Function MPNTRowECU(ByVal ECUVariantName) As Long
Dim MPNTRng As Range
Debug.Print ECUVariantName
Dim wsMPNT As Worksheet
Set wsMPNT = Worksheets("Module Part Number Tracker")
Set MPNTRng = wsMPNT.Range("C:C").Find(What:=ECUVariantName, LookIn:=xlValues, SearchOrder:=xlByRows)
If Not MPNTRng Is Nothing Then ' confirm that Find was successful
MPNTRowECU = MPNTRng.Row
Else ' Find failed to find "ECUVariantName"
MPNTRowECU = -10000 ' just put a high negative value to raise an error
End If
End Function
【讨论】:
以上是关于EXCEL VBA - 对象变量或未设置块变量的主要内容,如果未能解决你的问题,请参考以下文章