Использование на компьютере ;
в качестве разделителя региональных списков приводит вас в замешательство. VBA ориентирован на EN-US, поэтому Range.Formula и Range.FormulaR1C1 ожидают запятую (,
) в качестве разделителя списка аргументов функции.
Range("BC" & ActiveCell.Row).Formula = "=IF($BB" & ActiveCell.Row & "=" & """" & "REVIEW" & """" & ", IF(ROW($BB" & ActiveCell.Row & ")<MAX(IF($BB:$BB=" & """" & "OK" & """" & ", $A:$A)), IF(TODAY()-$AY" & ActiveCell.Row & ">=3, " & """" & "DROP" & """" & ", " & """" & "REVIEW" & """" & "), " & """" & "REVIEW" & """" & "), " & """" & """" & ")"
Альтернативно, Свойство Range.FormulaLocal или Свойство Range.FormulaR1C1Local можно использовать с собственной точкой с запятой в качестве разделителя списка.
Range("BC" & ActiveCell.Row).FormulaLocal = "=IF($BB" & ActiveCell.Row & "=" & """" & "REVIEW" & """" & ";IF(ROW($BB" & ActiveCell.Row & ")<MAX(IF($BB:$BB=" & """" & "OK" & """" & ";$A:$A));IF(TODAY()-$AY" & ActiveCell.Row & ">=3;" & """" & "DROP" & """" & ";" & """" & "REVIEW" & """" & ");" & """" & "REVIEW" & """" & ");" & """" & """" & ")"
Удвоение двойных кавычек внутри строки в кавычках является немного многословным, и запись xlR1C1 спасет некоторые шаги. TEXT(,)
совпадает с ""
в формуле; каждый производит одинаковую строку нулевой длины.
Range("BC" & ActiveCell.Row).Formula = "=IF($BB" & ActiveCell.Row & "=""REVIEW"", IF(ROW($BB" & ActiveCell.Row & ")<MAX(IF($BB:$BB=""OK"", $A:$A)), IF(TODAY()-$AY" & ActiveCell.Row & ">=3, ""DROP"", ""REVIEW""), ""REVIEW""), TEXT(,))"
'.FormulaR1C1
Range("BC" & ActiveCell.Row).FormulaR1C1 = "=IF(RC54=""REVIEW"", IF(ROW(R:R)<MAX(IF(C54:C54=""OK"", C1:C1)), IF(TODAY()-RC51>=3, ""DROP"", ""REVIEW""), ""REVIEW""), TEXT(,))"
Переписанные выше формулы xlA1 и xlR1C1, каждый из которых приводит к следующему, когда ActiveCell находится во второй строке.
=IF($BB2="REVIEW", IF(ROW($BB2)<MAX(IF($BB:$BB="OK", $A:$A)), IF(TODAY()-$AY2>=3, "DROP", "REVIEW"), "REVIEW"), TEXT(,))
Как я уже упоминал в комментариях выше, эта формула выглядит как формула массива. В этом случае используйте переписывание на основе запятой .Formula, но измените свойство Range.Formula на Range.FormulaArray .