我从VBA代码调用Match函数时遇到问题:它返回错误的值。 我有一个像这样的speadsheet(这是一个例子):
a b c d
1 testRange testValue
2 01/01/2011 00:00 03/01/2011 00:00 testValue = A4
3 02/01/2011 00:00
4 03/01/2011 00:00 result from match function
5 04/01/2011 00:00 3 testResult = MATCH(C2,A2:A20,1)
6 05/01/2011 00:00
7 06/01/2011 00:00 testResult
8 07/01/2011 00:00 9
9 08/01/2011 00:00
10 09/01/2011 00:00
11 10/01/2011 00:00
12 11/01/2011 00:00
13 12/01/2011 00:00
14 13/01/2011 00:00
15 14/01/2011 00:00
16 15/01/2011 00:00
17 16/01/2011 00:00
18 17/01/2011 00:00
19 18/01/2011 00:00
20 19/01/2011 00:00
我正在搜索的范围在A1:A20中,我正在寻找在C2中写的值,正如您所看到的只是范围的值(这是为了确保该值在范围)。我希望Match函数返回数字3,就像从电子表格(单元格C5)调用时一样,但是在VBA中调用的函数返回值9(单元格C10)。我用了这段代码:
Sub testMatch()
testRange = Range("A2:A20")
testValue = Range("C2")
testResult = Application.WorksheetFunction.Match(testValue, testRange, 1)
Range("C8") = testResult
End Sub
我已经尝试将testValue转换为Date和Double(在其他论坛中建议的解决方案),但是使用Date我有相同的结果,而且我得到错误1004“无法获取WorksheetFunctions类的Match属性“
有什么建议吗?
由于
答案 0 :(得分:4)
正如其他论坛所建议的那样,您应该键入变量(日期...)并使用Option Explicit
。
在这种情况下,错误来自match
函数中日期的使用,试试这个:
Application.WorksheetFunction.Match(CLng(testValue), testRange, 0)
(编辑>来源:感谢此thread)
我已经测试了你的例子,它对我有用。
此致
最高