【问题标题】:EXCEL VBA - Object Variable or With Block Variable Not SetEXCEL VBA - 对象变量或未设置块变量
【发布时间】: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 啊,看到我之前做过,但我遇到了一些其他错误,这就是为什么我很困惑并问了这个问题。谢谢!

标签: vba excel


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多