Условное скрытие листа из нескольких вариантов выбора - PullRequest
0 голосов
/ 09 октября 2019

Мне нужен лист в Excel, чтобы активировать, если какие-либо ячейки в столбце выбраны как «Да», но мой код VBA не прилипает - достаточно просто сделать это для одной ячейки, но весь столбец выбрасывает меня. Ячейки представляют собой выпадающий список с опциями «Да» или «Нет»

В настоящее время пытаются:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$11:$H$23" Then
            If ActiveWorkbook.Worksheets("Sheet1").Range("H11:H23").Value = "Yes" Then
            Sheets("Sheet2").Visible = True
        Else
            Sheets("Sheet2").Visible = False
        End If
    End If
End Sub

Есть какие-нибудь советы? Спасибо

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Более простым решением без зацикливания было бы подсчет Yes с использованием WorksheetFunction.CountIf метода .

. Используйте следующую команду, чтобы показать Sheet2, если хотя бы одну ячейку имеет Yes.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TestRange As Range
    Set TestRange = Me.Range("H11:H23")

    If Not Application.Intersect(Target, TestRange) Is Nothing Then  'if target is in test range

        If Application.WorksheetFunction.CountIf(TestRange, "Yes") > 0 Then
            Worksheets("Sheet2").Visible = True
        Else
            Worksheets("Sheet2").Visible = False
        End If
    End If
End Sub

Если все ячейки в тестовом диапазоне должны быть Yes, тогда измените его на

If Application.WorksheetFunction.CountIf(TestRange, "Yes") = TestRange.Cells.Count Then
1 голос
/ 09 октября 2019

Я думаю, вы можете попробовать:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim cell As Range, rng As Range
    Dim Inrng As Boolean

    If Not Intersect(Target, Me.Range("H11:H23")) Is Nothing Then
        'Set a boolean variable to false
        Inrng = False
        'Set a range to loop
        Set rng = Me.Range("H11:H23")
        'Start looping the range
        For Each cell In rng
            'Convert the value of a cell to Upper case to avoid case sensitive issues
            If UCase(cell.Value) = "YES" Then
                'Turn the variable to true if value appears in the range
                Inrng = True
                'Exit the loop to avoid time consuming
                Exit For
            End If

        Next cell

        If Inrng = True Then
            Worksheets("Sheet2").Visible = True
        Else
            Worksheets("Sheet2").Visible = False
        End If

    End If

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