Excel VBA.FormulaArray错误

Excel VBA.FormulaArray错误,vba,excel,excel-formula,Vba,Excel,Excel Formula,这个错误是1004错误,但我不明白为什么。单元格中的公式为: {=指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),37)+指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),38)-指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),39)} 为了将这个公式输入宏,我只使用了录制

这个错误是1004错误,但我不明白为什么。单元格中的公式为:

{=指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),37)+指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),38)-指标(KPI!A:AQ,匹配(1,(KPI!A:A=Monday!$K$1)*(KPI!C:C=Monday!B4),0),39)}

为了将这个公式输入宏,我只使用了录制工具,但它不起作用

Selection.FormulaArray = _
    "=INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),37)+INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),38)-INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),39)"

只要你坚持用艰苦的方式做事

Option Explicit

Sub wqer()
    With ThisWorkbook
        .Worksheets("KPI").Name = "K"
        .Worksheets("Monday").Name = "M"
        'geez - decide what cell you want without Selection¹ !!??!!
        Selection.FormulaArray = _
            "=INDEX(K!C[-3]:C[39],MATCH(1,(K!C[-3]=M!R1C11)*(K!C[-1]=M!RC[-2]),0),37)+INDEX(K!C[-3]:C[39],MATCH(1,(K!C[-3]=M!R1C11)*(K!C[-1]=M!RC[-2]),0),38)-INDEX(K!C[-3]:C[39],MATCH(1,(K!C[-3]=M!R1C11)*(K!C[-1]=M!RC[-2]),0),39)"
        .Worksheets("K").Name = "KPI"
        .Worksheets("M").Name = "Monday"
    End With
End Sub
来回重命名工作表会将公式置于内置的字符限制²下,该限制由记录了将数组公式插入单元格所需的时间。这将给您的工作簿带来不必要的计算需求,但这可能是您可以接受的解决方案。考虑在操作期间将应用程序的计算模式更改为手动。< /P>
.1请参阅,以了解更多摆脱依靠选择和激活来实现目标的方法

²请参见。

您也可以试试这个(
请不要从VBE运行它,请尝试从工作表环境运行它。转到“开发人员宏”您的宏-运行或从按钮或快捷方式运行它,它将正常工作):


几乎可以肯定,有一个更简单的公式来完成你正在尝试的事情。请将示例数据与预期结果一起添加。如中所述:“FormulaArray属性的字符限制也为255。”您的公式包含264个字符。太多了。那么就按照@Jeeped的建议去做吧。顺便说一句,我的测试表明您正在使用许多宽列和全列引用。这可能不是计算数组公式的有效方法。我明天会试一试。我是VBA新手,没有上过课,所以我一点也不惊讶我的公式/编码过于复杂。在这方面,我将在不久的将来学到很多东西。我只是在做那些对我有用的事情。我非常感谢您的反馈。这起作用了。我在Excel和VBA中有很多东西需要学习,但至少我已经有所进展。我所知道的唯一的VBA是从excel中记录的代码和本网站的示例中学习的。我的电子表格有很多工作,但它是功能性的。谢谢你的帮助
Selection.Formula = _
    "=INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),37)+INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),38)-INDEX(KPI!C[-3]:C[39],MATCH(1,(KPI!C[-3]=Monday!R1C11)*(KPI!C[-1]=Monday!RC[-2]),0),39)"

SendKeys "{F2}"
SendKeys "^+{ENTER}"