Получил следующий код, который работает как макрос VBScript Excel:
Sub replace()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=AVERAGE(3)"
Next I
Next ws
End Sub
Очевидно, =AVERAGE(3)
не предназначен для использования в любом случае, но чтобы показать, что этот код выше работает , а следующий блок работает , а не :
Sub replace()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=IF(1=1;1;0)"
Next I
Next ws
End Sub
На самом деле должна быть более сложная формула, где IF
(это выглядит примерно так: =IF(Q5<>0;IF(R5+S5>Q5;"ERROR";IF(R5="";S5/Q5;IF(Q5=R5;"Coord.";S5/(Q5-R5))));"N/A")
.
Дело в том, что я сузил его, пока не увидел, что даже этот тривиальный оператор =IF(1=1;1;0)
не работает с ошибкой времени выполнения 1004.
Я не думаю, что это важно для решения проблемы, но весь макрос предназначен только для обновления примерно 15 ячеек на каждом листе примерно на 31 лист. Как я уже сказал, первый блок работает (с вычислением AVERAGE()
), но =IF
не работает.
Ради полноты, вот код, который я хотел получить:
Sub updCells()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=IF(Q" & I & "<>0,IF(R" & I & "+S" & I & ">Q" & I & ",""ERROR"",IF(R" & I & "="""",S" & I & "/Q" & I & ",IF(Q" & I & "=R" & I & ",""Coord."",S" & I & "/(Q" & I & "-R" & I & ")))),""N/A"")"
Next I
Next ws
End Sub