[英]Excel VBA Array Formula using Index Match giving an error Type mismatch
我正在嘗試將數組公式添加到工作表的表列中。 我正在使用索引匹配並拆分公式,因為它對於所有文件名來說變得相當大。 我通過拆分它在代碼的其他部分使用它並且它有效(但使用不同的引用等)。
當我嘗試將匹配公式替換/插入到索引公式中時,我不斷收到錯誤“類型不匹配”。 當我手動執行(通過復制變量字符串值)時,它可以工作...
ATPFile = Dir(DataPath & "\*ATP*COMBINED.xls*")
ATPFileF = DataPath & "\" & ATPFile
Set wb = Workbooks.Open(ATPFileF)
'Add ATP data from ATP raw data file
sheetname = Worksheets("ATP").Name
'Get last row with data in ATP file
Dim rowCountSource As Integer
Dim ATPRowRange As Range
Dim sFomrula2 As String
With wb.Worksheets("ATP")
rowCountSource = .Cells(.Rows.Count, 2).End(xlUp).Row
End With
ref = DataPath & "\[" & ATPFile & "]" & sheetname
sFormula = "=INDEX('" & ref & "'!$P$1:$P$" & rowCountSource & ",""X_X_X"",1)"
sFormula2 = "MATCH([@Article]&[@Site],('" & ref & "'!$B$1:$B$" & rowCountSource & ")&('" & ref & "'!$D$1:$D$" & rowCountSource & "),0)"
'Add ATP info
With ws.ListObjects("Table_DCvenSDCdata")
With .ListColumns("ATP").DataBodyRange
.NumberFormat = "General"
With .Cells(1, 1)
.FormulaArray = sFormula
.Replace """X_X_X""", sFormula2
End With
.FillDown
.Value = .Value
End With
End With
錯誤彈出在.Replace """X_X_X""", sFormula2
文件引用和名稱都是正確的。 我不確定問題出在我的匹配公式中的哪個位置......
這就是 sFormula 字符串:
=INDEX('C:\_Store\10.05.2020\[T MA0 ATP 18.08.2020.xls COMBINED.xls]ATP'!$P$1:$P$126,"X_X_X",1)
這就是替換索引公式中的“X_X_X”的 sFormula2 字符串:
MATCH([@Article]&[@Site],('C:\_Store\10.05.2020\[T MA0 ATP 18.08.2020.xls COMBINED.xls]ATP'!$B$1:$B$126)&('C:\_Store\10.05.2020\[T MA0 ATP 18.08.2020.xls COMBINED.xls]ATP'!$D$1:$D$126),0)
任何建議將不勝感激!
如前所述,嘗試With
塊的這段代碼片段以及它之前的一些聲明。
Dim oldStr As String, newStr As String
oldStr = """X_X_X"""
newStr = "sFormula2"
With ws.ListObjects("Table_DCvenSDCdata")
With .ListColumns("ATP").DataBodyRange
.NumberFormat = "General"
With .Cells(1, 1)
.FormulaArray = sFormula
.FormulaArray = Replace(.FormulaArray, oldStr, newStr)
End With
.FillDown
.Value = .Value
End With
End With
請參考此相關鏈接。
我正在用我想出的解決方案回答我自己的問題。 我敢肯定還有其他方法,但這是對我有用的最快最簡單的方法。 正如@Scott Craner 提到的那樣,我進一步拆分了我的公式,因為 255 個字符的限制似乎是問題所在。
現在更改的代碼部分如下所示:
sFormula = "=INDEX('" & ref & "'!$P$1:$P$" & rowCountSource & ",""X_X_X"",1)"
sFormula2 = "MATCH([@Article]&[@Site],""X3""&""X4"",0)"
sFormula3 = "('" & ref & "'!$B$1:$B$" & rowCountSource & ")"
sFormula4 = "('" & ref & "'!$D$1:$D$" & rowCountSource & ")"
'Add ATP info
With ws.ListObjects("Table_DCvenSDCdata")
With .ListColumns("ATP").DataBodyRange
.NumberFormat = "General"
With .Cells(1, 1)
.FormulaArray = sFormula
.Replace """X_X_X""", sFormula2
.Replace """X3""", sFormula3
.Replace """X4""", sFormula4
End With
.FillDown
.Value = .Value
End With
End With
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.