2017-07-18 141 views
0

我在Excel中運行宏(在Mac上爲365版本15)時遇到問題。它在這部分失敗:對象'範圍'的方法'FormulaR1C1'失敗

Dim LastRow2 As Long 
LastRow2 = Range("A65000").End(xlUp).Row 

Range("AV2").Select 
ActiveCell.FormulaR1C1 = _ 
    "=IF(OR(AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-40]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-39]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-38]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-34]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-33]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-32]<1),AND(RC[" & _ 
    "ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-31]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-30]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-29]<1),AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-28]<1)),""Error"",""Good"")" 
Selection.AutoFill Destination:=Range("AV2:AV" & LastRow2) 

我不明白爲什麼......我沒有看到任何問題。任何幫助,將不勝感激。

+0

有用於range.formula包機限制:/ –

+2

也斷行',AND(RC [ 「&_ 」ZZ「」,RC [-'看來我錯了......公式會'... RC [ZZ],...' –

+1

@YowE3K字符數限制在'.FormulaArray'不是'.FormulaR1C1'我知道。 –

回答

1

打破你的公式導致極大的減少!

原始向下突破:

"=IF(
OR(
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-40]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-39]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-38]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-34]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-33]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-32]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-31]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-30]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-29]<1), 
    AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"",RC[-28]<1) 
), 
""Error"",""Good"")" 

可實現:

"=IF(
    AND(
     RC[-41]<>""ZZ"", 
     RC[-27]=""I"", 
     RC[-26]=""n"", 
     OR(
      RC[-40]<1, 
      RC[-39]<1, 
      RC[-38]<1, 
      RC[-34]<1, 
      RC[-33]<1, 
      RC[-32]<1, 
      RC[-31]<1, 
      RC[-30]<1, 
      RC[-29]<1, 
      RC[-28]<1 
     ) 
    ),""Error"",""Good"")" 

在便於維護模塊的頂端設置以此爲Private Const

Option Explicit 

Private Const AV_ErrOrGood As String = "=IF(AND(RC[-41]<>""ZZ"",RC[-27]=""I"",RC[-26]=""n"", OR(RC[-40]<1,RC[-39]<1,RC[-38]<1,RC[-34]<1,RC[-33]<1,RC[-32]<1,RC[-31]<1,RC[-30]<1,RC[-29]<1,RC[-28]<1)),""Error"",""Good"")" 

Sub SO45177305() 
    Dim LastRow2 As Long 
    LastRow2 = Range("A" & Rows.Count).End(xlUp).Row 
    Range("AV2:AV" & LastRow2).FormulaR1C1 = AV_ErrOrGood 
End Sub 
+0

很好地完成。可以通過使用生成的A1式公式來縮短它。我認爲它只是在R1C1風格,因爲錄製宏轉換它 – Slai

相關問題