尝试使用 FormulaArray 时出现错误 1004。替换技巧不起作用

Fox*_*rns 2 excel vba

背景:我有一个很酷的数组公式,它在 Excel 中运行得非常完美。现在我正在尝试使用 VBA 执行相同的公式。所以我在单元格中输入数组公式并用宏记录。该公式运行完美。宏记录器给我这个:

\n\n
Selection.FormulaArray = _\n    "=INDEX(\'[HOGARES ALBACETE.xlsx]21076\'!C1,MATCH(MAX(IF(RIGHT(\'[HOGARES ALBACETE.xlsx]21076\'!C1,LEN(R[-1]C)+2)=""["" &R[-1]C&""]"",\'[HOGARES ALBACETE.xlsx]21076\'!C2)),IF(RIGHT(\'[HOGARES ALBACETE.xlsx]21076\'!C1,LEN(R[-1]C)+2)=""[""&R[-1]C&""]"",\'[HOGARES ALBACETE.xlsx]21076\'!C2),0),1)"\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我尝试运行上面的代码,我会收到错误 1004。子程序只有这一行。没有其他的。

\n\n

经过一番研究后,我进入了这个:

\n\n

VBA运行时错误1004:无法设置范围类的formulaarray属性

\n\n

在 VBA 中输入长数组公式

\n\n

所以我把公式分成两部分:

\n\n
Dim theFormulaPart1 As String\nDim theFormulaPart2 As String\nDim MiReemplazo As String\nMiReemplazo = "cacota"\n\ntheFormulaPart1 = "=INDEX(\'[HOGARES ALBACETE.xlsx]21076\'!C1,MATCH(MAX(IF(RIGHT(\'[HOGARES ALBACETE.xlsx]21076\'!C1,LEN(R[-1]C)+2)=""["" &R[-1]C&""]"",\'[HOGARES ALBACETE.xlsx]21076\'!C2))," & MiReemplazo & ",0),1)"\ntheFormulaPart2 = "IF(RIGHT(\'[HOGARES ALBACETE.xlsx]21076\'!C1,LEN(R[-1]C)+2)=""[""&R[-1]C&""]"",\'[HOGARES ALBACETE.xlsx]21076\'!C2)"\n\nWith ActiveSheet.Range(\xe2\x80\x9cF2\xe2\x80\x9d)\n        .FormulaArray = theFormulaPart1\n        .Replace MiReemplazo, theFormulaPart2\n    End With\n
Run Code Online (Sandbox Code Playgroud)\n\n

我没有收到任何错误,但该部分.Replace MiReemplazo, theFormulaPart2什么也没做(我的意思是,替换没有发生,但代码执行)

\n\n

另外,尝试过:

\n\n
ActiveSheet.Range("F2").FormulaArray = theFormulaPart1\n        DoEvents\n        Cells.Replace What:=MiReemplazo, Replacement:=theFormulaPart2, LookAt:=xlPart, _\n        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _\n        ReplaceFormat:=False\n
Run Code Online (Sandbox Code Playgroud)\n\n

但什么也没有。所以我有点没有主意了。

\n\n

此外,还检查了两个公式字符串的长度 (173,107)。我需要排序器字符串吗?

\n\n

我非常确定这不是问题:

\n\n
    \n
  1. 如果我手动输入 Excel 中的公式,则该公式有效。所以不是公式本身的问题
  2. \n
  3. 我只是在 1 个单元格中工作并尝试在其他工作簿的单元格中获取 1 个值,因此不是内存或资源问题。
  4. \n
\n\n

提前致谢。

\n

Ror*_*ory 5

我敢打赌您的 Excel 未设置为使用 R1C1 引用,因此当您尝试将 R1C1 引用的字符串放入 A1 样式公式时,替换将不起作用。尝试使用:

Application.ReferenceStyle = xlR1C1
With ActiveSheet.Range("F2")
        .FormulaArray = theFormulaPart1
        .Replace MiReemplazo, theFormulaPart2
    End With
Application.ReferenceStyle = xlA1
Run Code Online (Sandbox Code Playgroud)