#vba #loops #hide #show
Вопрос:
У меня есть рабочая тетрадь со множеством листов. У меня есть рабочий лист с индексом, в котором перечислены имена рабочих листов в столбце B и вопрос «Да/нет» в столбце c. Мне нужен код, который, когда я нажму «ДА», откроет рабочий лист, которому он соответствует. Когда я нажму «НЕТ», он скроет рабочий лист. Имена в списке точно соответствуют названиям рабочих листов. Я предполагаю, что это будет с петлей?
Диапазон от B27 до C61
Комментарии:
1. Где конкретно вы застряли? Возможно, исследуйте это
Worksheet_Change
событие.2. Пытаюсь получить код для поиска имени в столбце B, когда в столбце C указано «ДА». Он должен найти скрытый лист с тем же именем и сделать его видимым
3.
ThisWorkbook.Worksheets(Range("B27").Value).Visible = xlSheetVisible
?4. Немного, но не должно ли это быть петлей?
5. Нет, если вы используете это
Worksheet_Change
событие.
Ответ №1:
Если мы предположим, что столбец 2 содержит название листа, а столбец 3 содержит либо Да, либо Нет, то этот код сделает это с помощью двойного щелчка:
Option Explicit
Private Function GetSheet(SheetName As String) As Worksheet
On Error Resume Next
Set GetSheet = ThisWorkbook.Sheets(SheetName)
If Err.Number <> 0 Then
Err.Clear
End If
End Function
Private Sub ShowHideClick(Rng As Range, ActivateSheet As Boolean)
Dim RowNum As Long, ColNum As Long
Dim YesNo As String
Dim SheetName As String
Dim Sht As Worksheet
RowNum = Rng.Row
ColNum = Rng.Column
If Not (RowNum >= 27 And RowNum <= 61 And ColNum = 3) Then Exit Sub
YesNo = Rng
If YesNo <> "Yes" And YesNo <> "No" Then Exit Sub
SheetName = Rng.Offset(0, -1)
Set Sht = GetSheet(SheetName)
If Sht Is Nothing Then Exit Sub
If YesNo = "Yes" Then
If Sht.Visible = xlSheetVeryHidden Then
Sht.Visible = xlSheetHidden
End If
Sht.Visible = xlSheetVisible
If ActivateSheet Then
Sht.Activate
End If
Rng.Value = "No"
Else
If Sht.Visible = xlSheetVisible Then
Sht.Visible = xlSheetHidden
End If
Rng.Value = "Yes"
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
ShowHideClick Target, True
End Sub
Вставьте код в таблицу woorksheet, содержащую таблицу «Да/нет».
Комментарии:
1. Привет, спасибо за ответ:)! Не могли бы мы сделать так, чтобы он не щелкал дважды, а, скорее, когда я использую раскрывающийся список и выбираю «Да», он автоматически откроется? Кроме того, когда он откроется, можем ли мы гарантировать, что экран не перейдет на новый лист, я хочу, чтобы он оставался на листе 1
2. @Адель, добро пожаловать. Ответ-это ответ на поставленный вами вопрос. Он активирует лист, который он показывает. Измените логическое значение при вызове
ShowHideClick
сTrue
наFalse
, чтобы не активировать лист. Причина, по которой мы используем двойной щелчок, заключается в том, что все другие методы захвата одного щелчка левой кнопкой мыши трудно поддерживать или создавать эффекты, которые воспринимаются пользователем как ошибки. Если у вас есть еще один вопрос, вам следует создать новый вопрос. Когда вы задаете вопросы о stackoverflow, не забудьте включить некоторый код, который показывает, что вы пытались сделать до сих пор.