Another >>无法设置范围类的FormulaArray属性

我已经研究了许多“无法设置范围类的FormulaArray属性”的问题在这里和其他网站解决一个FormulaArray操作,我试图执行一个数据表。

我已经考虑到R1C1考虑到我的公式中的255个字符限制,我试图先插入公式作为文本string。 我已经尝试了很多东西。

现在我想我的问题是,我试图只将我的公式插入空白单元格的事实,因为如果我简化我的公式只是= 1 + 1我仍然得到错误。 如果我改变.FormulaArray到.Formula简单地input一个标准的公式,我也得到了同样的错误。 这个操作是不可能的空白单元格?

该错误发生在.FormulaArray = myFormula1步骤。

为了确认,当手动input单元格时,公式本身就起作用(粘贴在下面)。

  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, “<=” &$ C2)> 0,IF(INDEX(MLBtransactions $ A:$ E,MATCH(1 (MLBtransactions!$ D:$ D = A $ 1)*(MLBtransactions!$ A:$ A <= $ C2),0),5)= $ A2,“DNP / SUS / MIN” (MLBtransactions $ A:$ E,MATCH(A $ 1,MLBtransactions $ d:$ d,0),5)),IF(COUNTIFS(MLBstats $ B:$ B,A $ 1,MLBstats $ A:$! A,$ A2)= 1,“DNP / SUS / MIN”,“留空白”))

用一个简化的代码(下面的例子)进行testing导致了实现,因为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设置为VBA中的单元格范围与在select整个范围时按CTRL + SHIFT + ENTER相同。 当单个公式返回结果数组并且您想要在选定的单元格范围内显示该数组时,将使用此方法。 这需要连续的单元格来显示数组。 试图设置.FormulaArray在不连续的单元格范围内将失败,无论公式是否好。

我想你正在尝试创build一个数组公式,对数组执行分析后返回单个结果; 并且您想要在所有空白单元格中使用此公式。

在Excel中,您需要将公式input到一个单元格中,然后将公式复制到其他单元格中。

同样,你需要在VBA中分两步进行。 您需要首先为.FormulaArray设置一个单元格。 这也将确认该公式正在VBA中正确构build。 然后,您可以将该单元格复制到所有空白单元格,如果您只想复制公式,请使用PasteSpecial。

或者,您可以循环遍历所有空白单元格,分别设置.FormulaArray,例如:

 Dim raCell As Range For Each raCell In Range("E2:AZ140") If IsEmpty(raCell) Then raCell.FormulaArray = ... Next 

但是,由于具有dynamic引用,因此需要仔细构造FormulaArray以根据当前raCell的.Row和.Column正确确定所需的公式。

如果你有一个“achor”的话,复制和粘贴会更安全。 在某处,您可以始终input完全相同的公式,并在复制并粘贴到所有其他单元格时获得正确的结果。

当您使用FormulaArray = ...设置公式时,它需要是一个有效的公式。 (我认为每个Replace公式需要继续有效,但我没有testing过。编辑:不,如果Replace会创build一个无效的公式,它只是不处理它 – 但它不会。)

你的问题似乎都来自你的myFormula1variables使用无效的公式。

我build议你使用以下内容:

 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(1232=$A2,""DNP/SUS/MIN"",""with ""&1233),1234)" myFormula2 = "INDEX(MLBtransactions!$A:$E,MATCH(1,(MLBtransactions!$D:$D=A$1)*(MLBtransactions!$A:$A<=$C2),0),5)" myFormula3 = "INDEX(MLBtransactions!$A:$E,MATCH(A$1,MLBtransactions!$D:$D,0),5)" myFormula4 = "IF(COUNTIFS(MLBstats!$B:$B,A$1,MLBstats!$A:$A,$A2)=1,""DNP/SUS/MIN"",""LEAVE BLANK"")" 'Insert the formula With Sheets("Sheet1").Range("E2:AZ140").SpecialCells(xlCellTypeBlanks) .FormulaArray = myFormula1 .Replace "1232", myFormula2 .Replace "1233", myFormula3 .Replace "1234", myFormula4 End With End Sub