Excel VBA .FormulaArray错误

时间:2016-09-20 23:32:09

标签: excel vba excel-vba excel-formula

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

  

{= INDEX(KPI!A:AQ,MATCH(1,(KPI!A:A =星期一$ķ$ 1)*(KPI C:!!! C =星期一B4),0),37)+ INDEX (KPI答:AQ,MATCH(1,(KPI!A:A =星期一$ķ$ 1)*(KPI C:!!! C =星期一B4),0),38) - 索引(KPI!A:AQ ,MATCH(1,(KPI!A:A =星期一$ $ķ1)*(KPI C:!!! C =星期一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)"

2 个答案:

答案 0 :(得分:1)

只要你坚持以艰难的方式做事,

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

来回重命名工作表会将您的公式置于Axel Richter所指示的内置字符限制2下,以便将数组公式插入单元格所需的时间。这会对您的工作簿产生不必要的计算需求,但对您来说这可能是一个可接受的解决方案。考虑在操作期间将应用程序的计算模式更改为手动。

有关远离依赖select和activate以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros

²请参阅Range.FormulaArray property

答案 1 :(得分:0)

你也可以试试这个(
请不要从VBE运行它,尝试从工作表环境运行它。转到Developer-Macros-Your Macro -Run或从按钮或快捷方式运行它,它将正常工作):

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}"