Проблема в том, что эта строка
Target.Formula = "=B23"
изменяет целевую ячейку, и это вызывает событие Worksheet_Change
, которое изменяет целевую ячейку, и это вызывает событие Worksheet_Change
… и т. Д.
Таким образом, вам нужно отключить события, прежде чем вы измените целевую ячейку (и снова включите их).
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$23" And Target.Value = vbNullString Then
Application.EnableEvents = False
Target.Formula = "=B23"
Application.EnableEvents = True
End If
End Sub
Альтернатива, которая работает также при выборе нескольких ячеек:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E23")) Is Nothing Then
Application.EnableEvents = False
If Range("E23").Value = vbNullString Then
Range("E23").Formula = "=B23"
Else
Range("E23").Value = Range("E23").Value - Range("E17").Value
End If
Application.EnableEvents = True
End If
End Sub