Когда я читаю ваш макрос, кажется, что вы хотите, чтобы определенные строки автоматически скрывались в зависимости от изменения значения ячейки E3
.Если это правильно, то я думаю, что следующая замена вашему коду будет работать:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E3")) Is Nothing Then checkE3
End Sub
Sub checkE3()
Dim E3val As String
E3val = UCase$(Range("E3").Value)
Rows("6:47").EntireRow.Hidden = Not (E3val = "DWW")
Rows("48:70").EntireRow.Hidden = Not (E3val = "THETIS")
Rows("71:75").EntireRow.Hidden = Not (E3val = "")
End Sub
Это сработает, если значение E3 изменится из-за того, что пользователь сам изменил его , но не если в E3 есть формула, которая при пересчете вызывает изменение.
В этом случае вы можете запустить checkE3
для других событий, таких как Worksheet_Calculate()
.Это может привести к тому, что он будет выполняться гораздо чаще, чем вам нужно, в основном каждый раз, когда выполняется перерасчет, но ресурс, используемый в checkE3, очень мал, поэтому вы вряд ли увидите какие-либо проблемы, если нет много расчета продолжается.
Private Sub Worksheet_Calculate()
checkE3
End Sub