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 - 对象变量或未设置块变量的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL VBA - 对象变量或未设置块变量

Excel vba 运行时错误 91 对象变量或未设置块

有时在 Outlook VBA 中获取“对象变量或未设置块变量”

运行时错误“91”(对象变量或未设置块变量)

运行时错误“91”:对象变量或未设置块变量

循环播放页面时出错。返回对象变量或未设置块变量