【发布时间】:2017-09-07 10:19:25
【问题描述】:
我在这里和其他网站中研究了尽可能多的“无法设置范围类的 FormulaArray 属性”问题,以解决我试图在数据表中执行的 FormulaArray 操作。
考虑到 R1C1,我在公式中遵守了 255 个字符的限制,我尝试先将公式作为文本字符串插入。我已经尝试了很多东西。
现在我认为我的问题在于我试图仅将公式插入空白单元格,因为如果我将公式简化为 =1+1,我仍然会收到错误。如果我将 .FormulaArray 更改为 .Formula 以简单地输入标准公式,我也会得到同样的错误。空白单元格不能进行此操作吗?
错误发生在.FormulaArray = myFormula1 步骤。
为了确认,手动输入单元格时,公式本身有效(在下面进一步粘贴)。
Sub ArrayMacro()
Dim myFormula1 As String
Dim myFormula2 As String
Dim myFormula3 As String
Dim myFormula4 As String
myFormula1 = "=IF(COUNTIFS(MLBtransactions!$D:$D,A$1,MLBtransactions!$A:$A,""<=""&$C2)>0,IF(INDEX(MLB," & "X_X_X)"
myFormula2 = "transactions!$A:$E,MATCH(1,(MLBtransactions!$D:$D=A$1)*(MLBtransactions!$A:$A<=$C2),0),," & "Y_Y_Y)"
myFormula3 = "5)=$A2,""DNP/SUS/MIN"",""with "" & INDEX(MLBtransactions!$A:$E,MATCH(A$1,MLBtransactions," & "Z_Z_Z)"
myFormula4 = "!$D:$D,0),5)),IF(COUNTIFS(MLBstats!$B:$B,A$1,MLBstats!$A:$A,$A2)=1,""DNP/SUS/MIN"",""LEAVE BLANK""))"
Sheets("Sheet1").Select
With Range("E2:AZ140").SpecialCells(4)
.FormulaArray = myFormula1
.Replace ",X_X_X)", myFormula2
.Replace ",Y_Y_Y)", myFormula3
.Replace ",Z_Z_Z)", myFormula4
End With
End Sub
问题更新。使用With Range("E2:AZ140").SpecialCells(xlCellTypeBlanks) 而不是With Range("E2:AZ140").SpecialCells(4) 也会以同样的错误结束。
这是正在使用的完整公式
=IF(COUNTIFS(MLBtransactions!$D:$D,A$1,MLBtransactions!$A:$A,"0,IF(INDEX(MLBtransactions!$A:$E, MATCH(1,(MLBtransactions!$D:$D=A$1)*(MLBtransactions!$A:$A
使用简化代码(下面的示例)进行测试导致了实现,因为 YowE3K 指出 myFormula1 需要有效才能使程序正常工作。
Sub ArrayMacro()
Dim myFormula1 As String
Dim myFormula2 As String
myFormula1 = "=1+1" & "+2+2"
myFormula2 = "+1+1"
Sheets("Sheet1").Select
With Range("h14:h16").SpecialCells(xlCellTypeBlanks)
MsgBox .Address
.FormulaArray = myFormula1
.Replace "+2+2)", myFormula2
End With
End Sub
【问题讨论】:
-
使用
.FormulaArray = myFormula1意味着myFormula1本身就是一个有效的公式。不是。 -
@YowE3K 我没有意识到这一点。在 myFormula1 中,我现在移动了
IF(INDEX....。在第二个公式的末尾附近并用简单的""true"",""false"")关闭公式1 中的 IF 语句,然后在替换中也使用它。它仍然会导致错误。正如我所提到的,即使在 myFormula1 中使用 =1+1 作为公式也会导致错误,一旦我到达步骤.FormulaArray = myFormula1 -
如果您在
E2:AZ140中没有任何空白单元格(或者即使它是一张空白表,这意味着您的UsedRange不会延伸到那里,因此单元格不是归类为空白)您的With语句将崩溃,但是一旦我越过那条线,我就可以将FormulaArray设置为=1+1。 -
你得到的实际错误信息是什么?
-
您将遇到的另一个问题是,如果您的目标范围中有一些非空白单元格,您可能会在
Range("E2:AZ140").SpecialCells(xlCellTypeBlanks)中有非连续区域,因此您的公式将仅适用于这些领域中的第一个。
标签: vba excel excel-formula