VBA, чтобы скрыть строки в других листах, когда определенные ячейки отображают определенное значение - PullRequest
0 голосов
/ 26 марта 2019

У меня довольно сложная книга Excel для отслеживания состояния проектов и других переменных.Рабочая тетрадь имеет в общей сложности 6 листов.На листе 1 все вводные данные сделаны.Остальные листы являются функциями, в основном отображающими значения из листа 1 по-разному.Большинство ячеек на листах 2-6 ​​выглядят так = SHEETONE! Z5.

Я хочу скрыть строки только из листов 2-6, когда значение в AG этой строки равно "отменено" "завершено""rescoped".Это позволит мне на первом листе служить основной записью всех проектов.

В настоящее время VBA на листе 1 выглядит следующим образом, но, похоже, он не работает.

 Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim lUsed As Long
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
   'do nothing
Else
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal
  If Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Or Target.Column = 5 Or Target.Column = 6 Or Target.Column = 7 Or Target.Column = 8 Or Target.Column = 9 Or Target.Column = 10 Or Target.Column = 11 Or Target.Column = 12 Or Target.Column = 13 Or Target.Column = 14 Or Target.Column = 15 Or Target.Column = 16 Or Target.Column = 17 Or Target.Column = 18 Or Target.Column = 19 Or Target.Column = 20 Or Target.Column = 21 Or Target.Column = 22 Or Target.Column = 23 Or Target.Column = 24 Or Target.Column = 25 Or Target.Column = 26 Or Target.Column = 27 Or Target.Column = 28 Or Target.Column = 29 Or Target.Column = 30 Or Target.Column = 31 Or Target.Column = 32 Or Target.Column = 33 Or Target.Column = 34 Or Target.Column = 35 Or Target.Column = 36 Then
  If oldVal = "" Then
      'do nothing
      Else
      If newVal = "" Then
      'do nothing
      Else
        lUsed = InStr(1, oldVal, newVal)
        If lUsed > 0 Then
            If Right(oldVal, Len(newVal)) = newVal Then
                Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 2)
            Else
                Target.Value = Replace(oldVal, newVal & ", ", "")
            End If
        Else
            Target.Value = oldVal _
              & ", " & newVal
        End If

      End If
    End If
  End If
End If

exitHandler:
  Application.EnableEvents = True
End Sub

Любая помощь или руководство, которое вы можете дать мне, очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...