Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1").Value = "Passed" Then
        Rows("2:5").EntireRow.Hidden = True
    ElseIf Range("A1").Value = "Failed" Then
        Rows("2:5").EntireRow.Hidden = False

    End If
End Sub

Я добавляю это к обычному модулю VBA. Когда я пытаюсь запустить его, система открывает экран макросов. Я хочу, чтобы это работало в фоновом режиме, чтобы все, что я набрал «Пропущено» в строке 1–5 A1, автоматически скрывалось.

Я использую Excel 2012. Пожалуйста помоги. Спасибо :-)

1 ответ1

2

Не добавляйте его в обычный модуль VBA; поместите это в модуль рабочего листа, где вы хотите, чтобы это произошло.

Событие Worksheet_Change будет срабатывать только в том случае, если оно хранится в коде таблицы. Я добавил этот код к своему объекту, и он работал правильно, поэтому просто поместите его в свой лист, и все будет хорошо.

Если вы хотите, чтобы он работал на нескольких листах, у вас есть несколько вариантов. Вы можете поместить код в том виде, как он есть в каждом объекте рабочего листа, или вы можете поместить код в модуль и добавить вызов для каждого рабочего листа. Каждый лист будет иметь что-то вроде этого:

Private Sub Worksheet_Change(ByVal Target As Range)
    Call PassFailCheck(Target)
End Sub

Затем вы можете поместить большую часть вашего кода в такой модуль:

Sub PassFailCheck()
    If Range("A1").Value = "Passed" Then
        Rows("2:5").EntireRow.Hidden = True
    ElseIf Range("A1").Value = "Failed" Then
        Rows("2:5").EntireRow.Hidden = False
    End If
End Sub

Второй вариант немного сложнее, но его легче поддерживать, если вам нужно регулярно вносить изменения в код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .