Скрыть или показать лист в зависимости от значения нескольких ячеек - PullRequest
0 голосов
/ 19 сентября 2019

Для работы я пытаюсь выяснить, как я могу сделать макрос в Excel, чтобы показать листы, когда вы набираете определенное слово в столбце.
Я совершенно новичок в этом, так что это большой поиск.

Пока я получил это:

Private Sub Worksheet_Change(ByVal Target As Range)
    If [C2] = "POMP" Then
        Sheets("POMP").Visible = True
    Else
        Sheets("POMP").Visible = False
    End If

    If [C2] = "TANK" Then
        Sheets("TANK").Visible = True
    Else
        Sheets("TANK").Visible = False
    End If

    If [C2] = "VENTILATOR" Then
        Sheets("VENTILATOR").Visible = True
    Else
        Sheets("VENTILATOR").Visible = False
    End If

    If [C2] = "MOTOR" Then
        Sheets("MOTOR").Visible = True
    Else
        Sheets("MOTOR").Visible = False
    End If
End Sub

Это просто пример для гораздо большего проекта.Это работает до сих пор.Когда я набираю MOTOR в C2, вкладка MOTOR раскрывается.Также и для других.Но ..

Это на самом деле должно работать для всей колонны C, а не только для C2.

Может ли кто-нибудь помочь мне с этим?

Еще один вопрос.Если при вводе слова нужно показать 2 листа, как я могу вставить это в код?Пример: я набираю MOTOR, а затем листы MOTOR и POMP должны показываться.

Если бы вы могли помочь мне с этим, это было бы такой помощью!

1 Ответ

0 голосов
/ 19 сентября 2019

Просто составьте список имен ваших листов в виде массива.Выполните цикл по этому массиву и проверьте с помощью метода WorksheetFunction.Match , существует ли имя листа в столбце C, чтобы скрыть или показать лист.

Обратите внимание, что Application.Match возвращает ошибку, если листимя не найдено в столбце C, поэтому мы используем его для запуска скрытия / показа.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim SheetNames() As Variant
    SheetNames = Array("POMP", "TANK", "VENTILATOR", "MOTOR") 'list your sheet names here

    Dim SheetName As Variant
    For Each SheetName In SheetNames
        Dim MatchedRow As Variant
        MatchedRow = Application.Match(SheetName, Me.Columns("C"), 0)

        On Error Resume Next 'catch error if sheet name does not exist
        ThisWorkbook.Worksheets(SheetName).Visible = Not IsError(MatchedRow)
        If Err.Number <> 0 Then MsgBox "Worksheet '" & SheetName & "' not found!", vbCritical
        On Error GoTo 0
    Next SheetName
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...