Vba 另一个>&燃气轮机;无法设置range类的FormulaArray属性

Vba 另一个>&燃气轮机;无法设置range类的FormulaArray属性,vba,excel,excel-formula,Vba,Excel,Excel Formula,我在这里和其他站点研究了很多“无法设置range类的FormulaArray属性”问题,以解决我试图在数据表中执行的FormulaArray操作的问题 我遵守了公式中255个字符的限制,考虑到R1C1,我尝试先将公式作为文本字符串插入。我试过很多东西 现在我想我的问题是,我试图只在空白单元格中插入我的公式,因为如果我将公式简化为只有be=1+1,我仍然会得到错误。如果我将.FormulaArray更改为.Formula,只需输入一个标准公式,我也会得到相同的错误。对于空白单元格,是否无法执行此操

我在这里和其他站点研究了很多“无法设置range类的FormulaArray属性”问题,以解决我试图在数据表中执行的FormulaArray操作的问题

我遵守了公式中255个字符的限制,考虑到R1C1,我尝试先将公式作为文本字符串插入。我试过很多东西

现在我想我的问题是,我试图只在空白单元格中插入我的公式,因为如果我将公式简化为只有be=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

使用
FormulaArray=…
设置公式时,它必须是有效的公式。(我认为在每次
Replace
之后,公式也需要继续有效,但我还没有对此进行测试。编辑:否,如果
Replace
将创建一个无效的公式,它只是不处理它-但不会崩溃。)

您的问题似乎都源于在
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(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
子数组宏()
将myFormula1设置为字符串
Dim myFormula2作为字符串
Dim myFormula3作为字符串
Dim myFormula4作为字符串
myFormula1=“=IF(COUNTIFS(MLB交易!$D:$D,A$1,MLB交易!$A:$A),“0,IF(1232=$A2”,“DNP/SUS/MIN”,“带”“&1233)”,1234)”

myFormula2=“索引(MLB交易!$A:$E,匹配(1)(MLB交易!$D:$D=A$1)*(MLBtransactions!$A:$A设置。VBA中单元格区域的FormulaArray与选择整个区域时按
CTRL
+
SHIFT
+
ENTER
相同。当单个公式返回结果数组,并且您希望在所选单元格区域中显示该数组时,将使用此选项。这需要一个contiguous单元格范围以显示数组。无论公式是否正确,尝试在非连续单元格范围上设置.FormulaArray都将失败

我认为您正在尝试创建一个数组公式,该公式在对数组执行分析后返回单个结果;您希望在所有空白单元格中使用此公式

在Excel中,需要在单个单元格中输入公式,然后将公式复制到其他单元格中

类似地,您需要在VBA中分两步执行。首先只需为一个单元格设置.FormulaArray。这还将确认公式在VBA中的构造是否正确。然后,如果您只想复制公式,可以使用PasteSpecial将该单元格复制到所有空白单元格

或者,您可以逐个循环设置.FormulaArray的所有空白单元格,例如:

Dim raCell As Range

For Each raCell In Range("E2:AZ140")
    If IsEmpty(raCell) Then raCell.FormulaArray = ...
Next
但是,由于您有动态引用,因此需要仔细构造FormulaArray,以便根据当前raCell的.Row和.Column正确确定所需的公式


如果您有“achor”,复制和粘贴会更安全“点。在你知道的某个地方,你总是可以输入完全相同的公式,并在复制和粘贴到所有其他单元格时得到正确的结果。

使用
。FormulaArray=myFormula1
意味着
myFormula1
本身就是一个有效的公式。它不是。@YowE3K我不知道。在myFormula1中,我现在移动了
如果(索引…
。在第二个公式的末尾附近,用一个简单的
“true”“false”结束公式1中的IF语句)
然后在替换中也使用它。它仍然会导致错误。但是,正如我提到的,即使在myFormula1中使用=1+1作为公式,在我到达步骤
时也会导致错误。FormulaArray=myFormula1
如果在
E2:AZ140中没有任何空白单元格(或者即使它是一张空白表,这意味着你的
UsedRange
没有扩展到那里,因此单元格也不会被归类为空白)您的
With
语句将崩溃,但一旦我通过该行,我就可以将
FormulaArray
设置为
=1+1
。您得到的实际错误消息是什么?您将遇到的另一个问题是,如果目标区域中有一些非空白单元格,则可能会有非连续区域
范围(“E2:AZ140”).SpecialCells(xlCellTypeBlanks)
,因此您的公式将只应用于这些区域中的第一个。好的,有一些进展。非常感谢。如果我使用它,并将范围设置为H14:H16,并使用H15 blank运行它(H14和H16是非空白的),它将数组公式输入H15,但地址没有增加以匹配单元格。如果我将H14设为空,并填充其他2个单元格,则结果相同,但公式中的地址仍与公式中所写的地址相同。如果H16为空(H14和H15非空),则会出现错误“未找到单元格”尽管H16为空且在范围内。最后一位(“未找到单元格”,即使H16为空)可能是因为您的
UsedRange
当前仅扩展到H15-在使用
SpecialCells
时,工作表当前“已使用”区域之外的单元格似乎不被视为工作表的一部分(我怀疑这是微软深思熟虑的决定,而不是一个bug)。对于第一部分,在我们得出任何有用的答案之前,您必须向我们提供更多详细信息,说明您的工作表是什么样子,以及为什么您只选择范围内的一些单元格来应用公式。我只选择整个表格的一小部分进行测试(时间)目的。因为它的大小,只在一小块上进行测试更快。我的数据跟踪美国职业棒球大联盟中的受伤情况。每一行代表一个球队和他们的一个ga
Dim raCell As Range

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