Скрыть лист Excel на основе значения ячейки в диапазоне - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь скрыть лист в книге Excel на основе содержимого любой из ячеек в данном диапазоне.

Допустим, у меня есть два листа - "Лист1" и "Лист2".
На Листе 1 я хочу установить диапазон - ячейка от C10 до F10.
Каждая из этих ячеек может быть либо пустой, либо содержать «Да» или «Нет» - выбирается из выпадающего списка.
Если для ЛЮБОЙ из ячеек в диапазоне установлено значение «Да», я хочу, чтобы Sheet2 был видимым, в противном случае (если все ячейки либо пустые, либо содержат «Нет»), я хочу, чтобы Sheet2 был скрыт.

Я пробовал разные фрагменты кода, включая следующие.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rCell As Range

    Application.ScreenUpdating = False
    For Each rCell In Range("C10:F10")
        If rCell.Value = "Yes" Then
            Worksheets("Sheet2").Visible = True
        Else
            Worksheets("Sheet2").Visible = False
        End If
    Next rCell
    Application.ScreenUpdating = True
End Sub

Я дошел до того, что Лист 2 виден, если все ячейки равны «Да» или F10 равняется «Да», но нет, если только одна из ячеек содержит «Да».

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Цикл не требуется, и создайте If, чтобы проверить, находится ли изменяемая ячейка в тестируемом диапазоне, просто чтобы сэкономить некоторое время компоновки:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("C10:F10"),Target) Is Nothing Then
        Worksheets("Sheet2").Visible = Application.Countif(Range("C10:F10"),"Yes")>0
    End If
End Sub
0 голосов
/ 02 января 2019

Измените и попробуйте:

Option Explicit

Sub test()

    Dim ws As Worksheet
    Dim rng As Range, cell As Range
    Dim Hide As Boolean

    For Each ws In ThisWorkbook.Worksheets

        Set rng = ws.Range("C10:F10")

        For Each cell In rng
            Hide = False
            If cell.Value = "Yes" Then
                Hide = False
                Exit For
            Else
                Hide = True
            End If
        Next

        If Hide = True Then
            ws.Visible = False
        End If

    Next

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