Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2016 - [решено] Excel - VBA - скрытие всех листов кроме перечисленных

Ответить
Настройки темы
2016 - [решено] Excel - VBA - скрытие всех листов кроме перечисленных

(*.*)


Administrator


Сообщения: 36471
Благодарности: 6669


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Всем привет!

В книге Excel есть 3 листа, которые должны отображаться всегда, а также N листов, которые нужно скрывать. Скрытые листы должны отображаться только при переходе по ссылке из первых трех. Нагуглил такой код

Код: Выделить весь код
Private Sub Worksheet_Activate()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If InStr(1, ws.Name, "Main", vbTextCompare) = 0 Then
            ws.Visible = False
        End If
    Next ws
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With Worksheets(Target.Range.Value)
    .Visible = True
    .Activate
    .Range("A1").Select
End With
End Sub
Первая часть кода скрывает листы, вторая - отображает их при переходе по ссылке, название которой совпадает с именем листа. Первое работает с одним листом Main, а у меня еще есть, скажем, Main1 и Main2.
Код: Выделить весь код
 If InStr(1, ws.Name, "Main", vbTextCompare) = 0 Then
Видимо, надо загнать все отображаемые листы в переменную и сравнивать их по очереди, но не могу сообразить, как это сделать. Подскажете?
Спасибо!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 13:14, 04-09-2017

 

Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Vadikan, можно воспользоваться кодом ниже, благо коллега Iska обозначил оптимальные пути решения .
Код нужно скопировать в модуль ThisWorkbook. Все листы рабочей книги, не входящие в список листов А, будут скрываться при каждом открытии файла.
Код: Выделить весь код
Private Sub Workbook_Open()
    Dim ws As Worksheet
    Dim strNames As String
    strNames = "Main1,Main2,Main3":  ' Перечень листов через запятую, который можно менять
    strNames = "," & strNames & ","
    For Each ws In ThisWorkbook.Worksheets
        
        If Not InStr(strNames, "," & ws.Name & ",") <> 0 Then
            ws.Visible = xlVeryHidden
        End If
    Next ws
    
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    With Worksheets.Item(Target.Range.Value)
        .Visible = True
        .Activate
        .Range(Target.SubAddress).Select
    End With
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:53, 25-11-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


(*.*)


Administrator


Сообщения: 36471
Благодарности: 6669

Профиль | Сайт | Отправить PM | Цитировать


Отлично, спасибо!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 00:42, 26-11-2017 | #12



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2016 - [решено] Excel - VBA - скрытие всех листов кроме перечисленных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление всех файлов (всех типов) из всех подпапок, кроме расширений txt kot318 Скриптовые языки администрирования Windows 10 12-02-2015 15:48
2007 - [решено] Перебор листов и ячеек в VBA alef2474 Microsoft Office (Word, Excel, Outlook и т.д.) 6 13-01-2013 18:28
VBA - Объекты в VBA (Excel) zena Программирование и базы данных 9 18-02-2012 20:36




 
Переход