对象'Range'的方法'FormulaR1C1'失败

我在Excel中运行macros时出现问题(在Mac上为365版本)。 它在这部分失败:

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) 

我无法弄清楚为什么…我没有看到有什么问题。 任何帮助,将不胜感激。

打破你的公式导致大减less!

原始分解:

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