Excel VBA中的索引与匹配

Excel VBA中的索引与匹配,excel,vba,excel-formula,Excel,Vba,Excel Formula,我不知道我在哪里失踪了。我试图提供从excel表中特定行到最后一行的公式。我遇到“无法获取工作表函数类的匹配属性:1004”错误 当我使用worksheetfunction.match时,以及当我使用Application.match时的“运行时错误-13-类型不匹配” 以下是我尝试过的代码: Sub PTO_Calculations() Dim UBSht As Worksheet Dim x As Long 'Variables for PTO Data Dim PTOSht As Wo

我不知道我在哪里失踪了。我试图提供从excel表中特定行到最后一行的公式。我遇到“无法获取工作表函数类的匹配属性:1004”错误 当我使用worksheetfunction.match时,以及当我使用Application.match时的“运行时错误-13-类型不匹配”

以下是我尝试过的代码:

Sub PTO_Calculations()

Dim UBSht As Worksheet
Dim x As Long

'Variables for PTO Data
Dim PTOSht As Worksheet
Dim PTORows As Long, PTOCols As Long
Dim PTOOldRows As Long
Dim PTOWholeRange As Range
Dim PTOFirstColumnRange As Range
Dim PTOFirstRowRange As Range

'Variables for Table in UB Sht
Dim UBTable As ListObject
Dim UBTableRows As Long, UBTableCols As Long
Dim UBTableOldRows As Long

Set UBSht = ThisWorkbook.Sheets("UB - US & IND")
Set PTOSht = ThisWorkbook.Sheets("PTO Data")

Set UBTable = UBSht.ListObjects("UB_US_IND")
UBTableRows = UBTable.ListRows.Count + 1
UBTableCols = UBTable.ListColumns.Count
UBTableOldRows = UBTableRows - WorksheetFunction.CountIf(UBSht.Range("A:A"), Format(DateAdd("m", -1, Date), "mmmm - yyyy")) 'UBSht.Range("XFD1").Value

PTORows = PTOSht.Range("A" & Rows.Count).End(xlUp).Row
PTOCols = PTOSht.Cells(1, Columns.Count).End(xlToLeft).Column
Set PTOWholeRange = PTOSht.Range(Cells(1, 1).Address, Cells(PTORows, PTOCols).Address)
Set PTOFirstColumnRange = PTOSht.Range("A:A")
Set PTOFirstRowRange = PTOSht.Range(Cells(1, 1).Address, Cells(1, PTOCols).Address)

'I'M FACING ERROR IN THE BELOW STEP
Range(UBTable.Range(UBTableOldRows + 1, 6), UBTable.Range(UBTableRows, 6)).Value = _
    Application.WorksheetFunction.Index(PTOWholeRange, Application.Match([@[Team Member Name]], PTOFirstColumnRange, 0), Application.Match([@Month], PTOFirstRowRange, 0))

end sub

提前感谢您的帮助。

第一步,使用对实际单元格的引用,而不是
[@[团队成员姓名]]
[@Month]
UBTable.Range(UBTableOldRows+1,6)
也不正确。它应该是
UBTable.Cells(UBTableOldRows+1,6)
^^^^^就像
UBTable.Range(UBTableRows,6)
一样。更重要的是,
Index/Match
的结果将是一个值,而不是每行的单独值。我建议切换到使用
变量
数组,放弃索引/匹配方法。这意味着
匹配
没有找到匹配项。您需要使用iError来测试。。。如前所述,这需要分成几行。保存
应用程序的结果。在变量中匹配
,测试是否有错误。如果不是,请在
索引中使用该变量。