我有一个问题,我试图使用Worksheet.Function.Lookup与Worksheet.Function.Choose组合。我已经确定了两个变量,用于确定查找和选择值。我基本上是使用查找函数首先找到一个值匹配的第一个变量。找到值后,我想在查找中使用choose函数,以返回由choose函数索引号确定的相应范围,该索引号由另一个变量确定。
这段代码给出了“运行时错误1004:无法获取WorksheetFunction类的Lookup属性”
我基本上是在尝试从一个旧的Excel4.0宏复制LOOKUP函数
有什么建议吗?
Sub Mysub()
Dim X As Long
Dim Y As Long
Dim Z As Integer
Y = 22.5
Z = 3
Windows("My file.xlsm").Activate ' Activates the file with the data
Worksheets("My sheet").Activate ' Activates the correct sheet
X = Worksheet.Function.Lookup(Y, Range("A1:A201").Value, WorksheetFunction.Choose(Z, Range("C1:C201").Value, Range("B1:B201").Value, Range("D1:D201").Value))
End Sub
所需输出:D列中与A列电流输出中的变量Y位于同一行的值:错误
3条答案
按热度按时间neskvpey1#
VBA查询:使用匹配和索引(后期绑定)
Option Explicit
,它将在编译时检测错误。在代码运行之前,例如它会提醒你有一个错字:Worksheet.Function
应该是WorksheetFunction
。快速修复
研究
nxowjjhe2#
Range("A1:A201").Value
尝试从200个单元格中获取一个值,而不是200个不同的值。例如,尝试简单的?Range("A1:A2").Value
,看到相同的错误。使用
Range("A1:A201")
等。适用于您的所有范围另一个你可能还没有注意到的问题:
22.5
不是Long
。如果你想使用小数,Dim Y As Double
。否则,宏将工作,但它会给予你一个不正确的结果。hjzp0vay3#
我改变了“激活”与直接引用的书和表。在Choose中,你有一个.Value,而你必须返回一个Range。为了使这一点显而易见,并使代码易于阅读,我将Choose移出了查找。最后,Lookup返回的值应该在某个地方使用,所以我创建了Sub函数并返回找到的值。