【问题标题】:Unable to get the Lookup property of the WorksheetFunction class无法获取 WorksheetFunction 类的 Lookup 属性
【发布时间】:2012-03-09 13:10:46
【问题描述】:

以下代码:

For i = startRow To startRow + (nRows - 1)    
Set lookUp = Range(col & i)
Range("I" & i) = IIf(WorksheetFunction.lookUp(lookUp, Sheets("P&C curves").Columns("A")) = lookUp, 1, 0)
Range("J" & i) = IIf(WorksheetFunction.lookUp(lookUp, Sheets("G Curve").Columns("A")) = lookUp, 1, 0)      
Next i

在代码中,我第一次调用WorksheetFunction.lookUp 时一切正常,即它在找到某些东西的地方用 1 填充列,否则它输入零,但第二行不起作用。我收到错误:

无法获取工作表函数类的查找属性。

为什么会这样?如果我尝试直接在 Excel 工作表中使用相同的逻辑,它会起作用吗?

非常感谢任何帮助...非常感谢

【问题讨论】:

    标签: excel vba worksheet-function


    【解决方案1】:

    在这种情况下,由于查找值在数组中不可用而出现错误。 如果我们在 excel 文件中编写公式并且我们在数组中没有查找值,那么它只是返回 #N/A 但在 VBA 中它返回 Unable to get lookup property of the worksheetfunction class。而不是#N/A。因此,您需要在其上添加 On error resume next。

    第二种方法是你可以使用循环的公式

    【讨论】:

      【解决方案2】:

      这是你正在尝试的吗?

      For I = startRow To startRow + (nRows - 1)
          Set Lookup = Range(col & I)
      
          On Error Resume Next
      
          Ret = WorksheetFunction.Lookup(Lookup, Sheets("P&C curves").Columns("A"))
          If Err.Number <> 0 Then
              Range("I" & I) = 0
              Err.Clear
          Else
              If Ret = Lookup Then Range("I" & I) = 1 Else Range("I" & I) = 0
          End If
      
          Ret = WorksheetFunction.Lookup(Lookup, Sheets("G Curve").Columns("A"))
          If Err.Number <> 0 Then
              Range("J" & I) = 0
              Err.Clear
          Else
              If Ret = Lookup Then Range("J" & I) = 1 Else Range("J" & I) = 0
          End If
      Next I
      

      【讨论】:

      • 嗨,感谢您的支持,是的,这是我需要实现的逻辑,但是由于 IF Else 语句,复制您编写它的方式会减慢一切.....在我的代码中第一行完美运行,并且按照您在第一部分中的描述进行,但奇怪的是第二行不起作用??
      • 那是因为它找不到值而出错。我们在谈论多少行?我刚刚测试了上面的代码 700 行,眨眼间就完成了……如果我可以这么说的话。
      • 好的可以解释更多关于它错误的信息,我的意思是如果我删除第二行它会完全通过第一行。通常它找不到值,所以它在单元格中输入零,如果第二行存在,为什么这种行为不再起作用?
      • 第一行有效,因为您在“P&C 曲线”中有搜索值,但在第二行失败,因为搜索值不在“G 曲线”中。 Lookup() 在这种情况下会返回 #N/A,因此您会收到错误消息。
      • 或者,您可以使用此原则忽略错误 =IF(ISERROR(LOOKUP(A2,'P&amp;C curves'!A:A)),0,LOOKUP(A2,'P&amp;C curves'!A:A)) 并将其合并到您的 VBA 代码中
      猜你喜欢
      • 2015-06-14
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多