背景:
我得到了一个很酷的数组公式,它在Excel中工作得很好。现在我正在尝试用同样的公式,但是用vba。所以我在一个单元格中键入数组公式,并用宏进行记录。这个公式很好用。宏记录器给了我这个:
Selection.FormulaArray = _
"=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)"
如果我尝试运行上面的代码,我会得到错误1004。潜艇只有那条线。没有别的了。
经过一些研究,我了解到:
VBA Run time error 1004: Unable to set the formulaarray property of the range class
Entering Long Array Formulas In VBA
所以我把公式分成两部分:
Dim theFormulaPart1 As String
Dim theFormulaPart2 As String
Dim MiReemplazo As String
MiReemplazo = "cacota"
theFormulaPart1 = "=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)"
theFormulaPart2 = "IF(RIGHT('[HOGARES ALBACETE.xlsx]21076'!C1,LEN(R[-1]C)+2)=""[""&R[-1]C&""]"",'[HOGARES ALBACETE.xlsx]21076'!C2)"
With ActiveSheet.Range(âF2â)
.FormulaArray = theFormulaPart1
.Replace MiReemplazo, theFormulaPart2
End With
我没有得到错误,但是那部分
.Replace MiReemplazo, theFormulaPart2
什么都不做(我的意思是,替换不会发生,但代码会执行)
此外,尝试了:
ActiveSheet.Range("F2").FormulaArray = theFormulaPart1
DoEvents
Cells.Replace What:=MiReemplazo, Replacement:=theFormulaPart2, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
但什么都没有。所以我有点不知所措。
此外,还检查了两个公式字符串的长度(173107)。我需要整理一下琴弦吗?
我很确定这不是问题:
-
如果我手动键入,Excel中的公式就可以工作。所以这不是公式本身的问题
-
我只是在一个单元格中工作,并试图在其他工作簿的单元格中获取1个值,所以这不是内存或资源问题。
事先谢谢。