Попытка скрыть листы на основе значения ячейки для диапазона ячеек в диапазоне листов - PullRequest
1 голос
/ 24 сентября 2019

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

У меня есть основной индекс, в котором есть столбец с G2:G30 для диапазона значений, чтобы указать, будет ли показан лист.У меня есть ряд листов, которые были пронумерованы для ссылок ниже этого диапазона от 1,2,3, ..... до 26. У меня есть простое решение VBA, которое покажет один G2 из "Y", чтобы показать илискрыть иначе.Я не имею ни малейшего представления о том, как это будет выглядеть, чтобы перебрать эти 2 диапазона, чтобы все соответствовало.Они являются инкрементными.

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

Мне действительно нужно это перебрать диапазон, чтобы указать листы на рабочем листе.

Ответы [ 2 ]

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

Вы можете попробовать подобное:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range(Cells(2, 7), Cells(30, 7))) Is Nothing Then Exit Sub
    Select Case UCase(Target.Value)
        Case "Y"
            Sheets(Target.Row).Visible = True
        Case "N"
            Sheets(Target.Row).Visible = False
    End Select
End Sub

Это будет работать исключительно на основе строки вашей цели

enter image description here


Если у вас есть имя листа в соседней ячейке, вы можете попробовать:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range(Cells(2, 7), Cells(30, 7))) Is Nothing Then Exit Sub
    Select Case UCase(Target.Value)
        Case "Y"
            Sheets(Cells(Target.Row,Target.Column-1).Value).Visible = True
        Case "N"
            Sheets(Cells(Target.Row,Target.Column-1).Value).Visible = False
    End Select
End Sub

enter image description here


Протестировано с 4листы, от Sheet1 (иначе листы (1)) до sheet4 (иначе листы (4)).

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

Я хотел бы предложить небольшое изменение вашего запроса.Если вы добавите имя листа в ячейки H2: H30, то вы можете сделать что-то вроде этого:

Dim SheetRef As Range
Dim TargetSheet As Worksheet
For Each SheetRef In Range("G2:G30")
    Set TargetSheet = ThisWorkbook.Worksheets(SheetRef.Offset(0, 1).Value)
    TargetSheet.Visible = (UCase(SheetRef.Value) = "Y")
Next

Это будет читать имя листа из ячейки справа от G2, G3 и т. Д. И использоватьэто для контроля видимости.
Если вы этого не сделаете, вам придется найти другой способ узнать, какой переключатель относится к тому или иному листу.

...