2016-03-23 1 views
1

Я использую следующий код, чтобы скрыть нужные ячейки в Excel VBA.Скрытие ячеек с помощью VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim Cell As Range 
    Set Cell = Range("$F$26") 
    If Not Application.Intersect(Cell, Range(Target.Address)) Is Nothing Then 
     If Range("F26").Value < 2 Then 
      Rows("39:61").EntireRow.Hidden = True 
      ElseIf Range("F26").Value < 3 Then 
      Rows("47:61").EntireRow.Hidden = True 
      ElseIf Range("F26").Value < 4 Then 
      Rows("55:61").EntireRow.Hidden = True 
      Else: Rows("39:61").EntireRow.Hidden = False 
     End If 
    End If 
End Sub 

Он отлично работает, когда я помещаю значения в порядке убывания (например, 4, 3, 2, 1). Но после ввода 1, если я планирую перейти на 2 или 3 (но не 4). Затем он не отображает ячейки во второй и третьей панельных группах. Но если я положил 4, то он снова отобразит все группы групп. Я прикрепил скриншоты ниже.

enter image description here

enter image description here

enter image description here

ответ

1

Вы должны заново оценить последующие вызовы с новыми значениями в диапазоне ("$ F $ 26") с нуля; например сделать все видимым, а затем решить, что скрывается.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Application.Intersect(Range("F26"), Range(Target.Address)) Is Nothing Then 
     Application.ScreenUpdating = False 
     Rows("39:61").EntireRow.Hidden = False 
     Select Case Range("F26").Value 
      Case Is < 2 
       Rows("39:61").EntireRow.Hidden = True 
      Case 2 
       Rows("47:61").EntireRow.Hidden = True 
      Case 3 
       Rows("55:61").EntireRow.Hidden = True 
     End Select 
     Application.ScreenUpdating = True 
    End If 
End Sub 

Я изменил свою оценку условия к Select Case statement и удалил Cell переменные как unnnecessary.

Не удалось найти причину проблем: Range ("F26") был пустым. В настоящее время это подпадает под состояние < 2.