簡體   English   中英

Excel VBA 使用索引匹配的數組公式給出錯誤類型不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM