Я подозреваю, что пользовательские функции, используемые вашими формулами, вызываются при выполнении вашего кода, что возмущает цикл; также возможно, что обработчик события Worksheet_Change, если он существует, мешает вашему циклу.
В вашей подпрограмме Formatting
сэндвич цикла For
между Application.Calculation
и Application.EnableEvents
выглядит следующим образом:
Sub Formatting()
Dim Grey_ws as Worksheet
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
For Each Grey_ws In ThisWorkbook.Worksheets
Call Grey_VALUE_AND_RANGE_ALL(Grey_ws)
Next Grey_ws
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
Это позволит Excel знать, что он не должен вычислять результаты формулы или генерировать события, пока выполняется цикл.
Чтобы оставаться в безопасности, обязательно восстановите расчеты и события в случае ошибки:
Sub Formatting()
Dim Grey_ws As Worksheet
Dim lInitialCalculation As XlCalculation
Dim bInitialEnableEvents As Boolean
On Error GoTo ErrorHandler
lInitialCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
bInitialEnableEvents = Application.EnableEvents
Application.EnableEvents = False
For Each Grey_ws In ThisWorkbook.Worksheets
Call Grey_VALUE_AND_RANGE_ALL(Grey_ws)
Next Grey_ws
Cleanup:
On Error Resume Next '<== important to prevent an infinite error loop, should the cleanup code fail.
If Application.EnableEvents <> bInitialEnableEvents Then
Application.EnableEvents = bInitialEnableEvents
End If
If Application.Calculation <> lInitialCalculation Then
Application.Calculation = lInitialCalculation '<== back to the initial value.
End If
Exit Sub
ErrorHandler:
MsgBox Err.Description, vbExclamation + vbOKOnly '<== or whatever you see fit.
GoTo Cleanup
End Sub