无法获取WorksheetFunction类的Match属性
我想要做的是基于单元格oSht_Input.Cells(Rows, 7)
,我想在另一张表(periodSheet)列A中find一个匹配,并根据给定的列获取相应的值。
我已经尝试过使用.Index
和.Index
来做到这一点。 .Index
适用于我,但我越来越错误,说
运行时错误“1004”:无法获取WorksheetFunction类的Match属性。
我也尝试过在代码中执行Application.Match
,但是这会返回一个#N/A
值。
我究竟做错了什么?
我有点困惑Application.Match
和Application.WorksheetFunction.Match
的使用。
Set oSht_Input = Worksheets(outSheet) Set periodSheet = Worksheets("PeriodMetadata") lastRow = oSht_Input.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For Rows = 2 To lastRow With Application.WorksheetFunction dateCell = oSht_Input.Cells(Rows, 7) If rollupDataFile.GroupByPeriod Like "Week*" Then If rollupDataFile.GroupByPeriod Like "*Sunday" Then oSht_Input.Cells(Rows, 16).value = .Index(periodSheet.Range("B:H"), .Match(dateCell, periodSheet.Range("A:A"), 0), 1) ElseIf rollupDataFile.GroupByPeriod Like "*Monday" Then oSht_Input.Cells(Rows, 16).value = .Index(periodSheet.Range("B:H"), .Match(dateCell, periodSheet.Range("A:A"), 0), 2) .... code continues
编辑:决定添加一点更多的背景下更好地澄清基于初始反馈。
dateCell
将采取一个单元格的值,这绝对是一个date值。 periodSheet中的A列包含了从2000年1月1日到2020年12月31日的每个单一date,基本上涵盖了所有可能的date。 您可以放心地假设dateCell
的值将在20年的这个范围内。
这是oSht_Input,其中列G是date
2.这是PeriodMetadata表,我试图匹配列A(其中包含2000年至2020年的每一个date之前find基于.index函数的值。
处理date时,请改用CLng()
或.Value2
:
Sub SO() '// C3 = "03/02/2015" '// A1:A14 = "01/02/2015" to "14/02/2015" '// All cells formatted as dates '// This will NOT work: Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0) '// This WILL work: Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0) '// This WILL also work: Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0) End Sub
这是因为Excel将date存储为数字的方式 – 有时需要在VBA中进行说明
当找不到匹配时,就是你得到的错误。
在下面的例子中,例如,
MsgBox WorksheetFunction.Match(4, Range("A1:A4"), 0)
按预期返回“4”,但是
MsgBox WorksheetFunction.Match(5, Range("A1:A4"), 0)
引发“无法获取WorksheetFunction类的匹配属性”错误。
另请参阅关于Worksheetfunction
和Application
行为不同的说明。