Страницы: 1
RSS
Отображение листов с помощью макроса, Отображение листов определенным пользователям с помощью макроса
 
Здравствуйте!

Помогите, пожалуйста, переделать макрос:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'скрываем все листы, кроме листа ПРЕДУПРЕЖДЕНИЕ
    Worksheets("Предупреждение").Visible = True
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = "Предупреждение" Then
            sh.Visible = True
        Else
            sh.Visible = xlSheetVeryHidden
        End If
    Next sh
    'сохраняемся перед выходом
    ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
    Dim wsSh As Object
    For Each wsSh In Me.Sheets
        Protect_for_User_Non_for_VBA wsSh
    Next wsSh
    For Each sh In ThisWorkbook.Worksheets
        sh.Visible = True
    Next sh
    If Environ("USERNAME") <> "Первый" And Environ("USERNAME") <> "Второй" Then     'если пользователя не зовут
       Worksheets("Настройки").Visible = False     'скрываем Настройки
       Worksheets("Сотрудники").Visible = xlVeryHidden    'делаем лист Сотрудники суперскрытым
    End If
    'скрываем листы ПРЕДУПРЕЖДЕНИЕ
    Worksheets("Предупреждение").Visible = xlSheetVeryHidden
End Sub

Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet)
    wsSh.Protect Password:="12345", UserInterfaceOnly:=True
End Sub
Лист предупреждения все также скрывается, при соглашении включения макросов.
Сейчас все листы отображаются только двоим сотрудникам, остальным первые две.
Нужно чтобы всем отображалась только первая страница, определенным пользователям две страницы, и еще пару пользователям все страницы, кроме Предупреждения.  
 
вы предлагаете тестовый файл нам самим делать к вашему коду?.. - согласно Правил форума
Изменено: JeyCi - 30.08.2016 06:17:06
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, требуется изменения в макросе, с файлом посложнее будет.
Пароль: 96318645

При открытии, если не разрешены макросы, отображать страницу Предупреждение - сейчас так и есть.
Если макросы разрешены, отображать 1 страницу всем.
Если имя пользователя e.shevskaya и a.gubanov отображать все страницы, кроме Предупреждение - сейчас так отрабатывает макрос.
Если имя пользователя, например: 1 пользователь, 2 пользователь, 3 пользователь и т.д. отображать первые две страницы.
Либо, возможно привязать к группам AD?  
 
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'скрываем все листы, кроме листа ПРЕДУПРЕЖДЕНИЕ
    Worksheets("Предупреждение").Visible = True
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = "Предупреждение" Then
        Else
            sh.Visible = xlSheetVeryHidden
        End If
    Next sh
    'сохраняемся перед выходом
    ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
    Dim wsSh As Object
    For Each wsSh In Me.Sheets
        Protect_for_User_Non_for_VBA wsSh
    Next wsSh
    Select Case Environ("USERNAME")
    Case "A.Gubanov", "e.shevskaya"
        For Each sh In ThisWorkbook.Worksheets
            sh.Visible = xlSheetVisible
        Next sh
    Case "первый", "второй"
        Sheets("Отдел").Visible = xlSheetVisible
        Sheets("Настройки").Visible = xlSheetVisible
    Case Else
        Sheets("Отдел").Visible = xlSheetVisible
    End Select
    'скрываем листы ПРЕДУПРЕЖДЕНИЕ
    Worksheets("Предупреждение").Visible = xlSheetVeryHidden
End Sub
 
RAN, Спасибо, данный макрос отлично отрабатывает. А к доменной группе возможно привязать? Чтобы первый и второй лист отображались доменной группе?
 
Далеко не факт, что есть доступ к считыванию таких параметров, как имя доменной группы пользователя. Такой вариант не подойдет?
Изменено: The_Prist - 30.08.2016 09:07:22
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,Нет, требуется прозрачная "авторизация".  
 
Возможно. Но можно же стырить алгоритм сравнения имени пользователя с данными по пользователям на отдельном листе. И все. Т.е. форма убирается, код чуть модифицируется.
А по вопросу определения группы - искать-то не пробовали? Мне не на чем тестировать код, который есть у меня, поэтому дам ссылку на нечто похожее:
http://forum.codenet.ru/q39412/
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх