【发布时间】:2018-07-05 16:39:01
【问题描述】:
背景:我有一个很酷的数组公式,它在 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
但什么都没有。所以我有点没有想法。
此外,检查了两个公式字符串的长度 (173,107)。我需要排序器字符串吗?
我很确定这不是问题:
- 如果我手动键入 Excel 中的公式,它可以工作。所以不是公式本身的问题
- 我只是在 1 个单元格中工作,并试图在其他工作簿的单元格中获取 1 个值,所以不是内存或资源问题。
提前致谢。
【问题讨论】:
-
cacota是一个命名范围吗? -
21076 是 HOGARES ALBACETE.xlsx 中唯一的工作表吗?
-
@ScottCraner 不,不是。只是一个词来代替。任何工作簿、范围或值中都没有
cacota -
@Jeeped。不,还有更多工作表。为什么? :O
-
我下面的方法要求在外部工作簿中至少保留 1 个工作表。