Страницы: 1
RSS
Выборочное отображение листов для пользователей
 
На просторах интернета нашел очень интересный и полезный макрос
Код
Private Sub Workbook_Open() 
  If Environ("USERNAME") <> "Nikolay" Then 'если логин пользователя не Nikolay  
     Worksheets("Лист1").Visible = False 'скрываем Лист1 
     Worksheets(3).Visible = xlVeryHidden 'делаем 3-й лист суперскрытым 
  Else
      For i = 1 To Worksheets.Count 'в противном случае 
        Worksheets(i).Visible = True 'проходим в цикле по всем листам 
      Next i 'и делаем их видимыми 
  End If
End Sub

собственно вот ссылка на первоисточник.

Пытался добавить в макрос еще несколько пользователей через оператор Or
Код
If Environ("USERNAME") <> "Nikolay" Or "Ivan"  Then 'если логин пользователя не Nikolay или Ivan
но Excel ругается

Вообще пытаюсь добиться следующего:
Код
'если логин пользователя не Nikolay, Ivan, Petr 
'скрываем Лист1 
'делаем 3-й лист суперскрытым 
'в противном случае
'если логин пользователя Nikolay 
'проходим в цикле по всем листам 
'и делаем их видимыми 
'если логин пользователя Ivan, Petr
'делаем видимыми лист 1 и лист 3
Кто подскажет как правильно все-таки добавить нескольких пользователей?
 
Ну, во-первых синтаксис:
Код
If Environ("USERNAME") <> "Nikolay" Or Environ("USERNAME") <> "Ivan"  Then
(работать не будет ибо результат будет всегда true)
заработает так:
Код
If Environ("USERNAME") <> "Nikolay" and Environ("USERNAME") <> "Ivan"  Then

а во-вторых почитайте справку по select case. Этот способ лучше подходит для множественного выбора.
Изменено: kuklp - 08.02.2019 20:48:16
Я сам - дурнее всякого примера! ...
 
Статья как раз по Вашей теме.
 
kuklp, спасибо, помогли. начал читать по select case, думаю Вы правы, что этот способ более уместен.
Юрий М, спасибо, очень полезная статья. Но в том примере, на который я ссылался там идентификация пользователя происходит от имени учетной записи ПК. В данный момент мне это более интереснее.

Причесал макрос пока так. Вроде работает.
Код
Private Sub Workbook_Open()
    If Environ("USERNAME") <> "Nikolay" And Environ("USERNAME") <> "Ivan" Then 'если пользователя не зовут Nikolay или Ivan
    Worksheets("Лист1").Visible = True  'отображается лист1
    Worksheets("Лист2").Visible = xlVeryHidden 'скрывается лист2
    Worksheets("Лист3").Visible = xlVeryHidden 'скрывается лист3
    Else
    If Environ("USERNAME") = "Nikolay" Then 'если пользователь все-таки Nikolay,то
    Worksheets("Лист1").Visible = True 'отображается лист1
    Worksheets("Лист2").Visible = True 'отображается лист2
    Worksheets("Лист3").Visible = True 'отображается лист3
    Else
    If Environ("USERNAME") = "Ivan" Then 'а если пользователь все-таки Ivan,то
    Worksheets("Лист1").Visible = xlVeryHidden 'скрывается лист1
    Worksheets("Лист2").Visible = True  'отображается лист2
    Worksheets("Лист3").Visible = True  'отображается лист3
    End If
    End If
    End If
End Sub
Изменено: SevenZZ - 08.02.2019 23:00:37
 
Здравствуйте. Лучше не скрывать листы при открытии файла, а отображать, а скрывать все листы при закрытии файла. Если открыть Ваш файл с выключенными макросами, то любой может просмотреть все листы, не зависимо от учетной записи. А список учетных записей можно сделать на отдельном листе и там же обозначить для кого какие листы отображать.
 
gling, а если изначально все листы скрыть и сохранить книгу. В таком случае, если макросы не разрешены, то скрытые листы останутся скрытыми,а видимыми их может сделать только макрос, который для определенного пользователя откроет определенные листы.
 
Цитата
SevenZZ написал:
если изначально все листы скрыть
О том и речь. Но у Вас Лист2 и Лист3 скрываются после определения имени, следовательно они были не скрыты. И после работы одного пользователя при закрытии книги разрешенные листы вновь должны быть скрыты. Поэтому и написал
Цитата
gling написал:
скрывать все листы при закрытии файла.
Не все конечно, один оставить и на нем написать что для работы необходимо включить макросы.
 
gling, спасибо, Вы на очень важный момент обратили внимание.  
 
Цитата
SevenZZ написал:
идентификация пользователя происходит от имени учетной записи ПК
А если за этой машиной окажется "левый" пользователь? ))
 
Юрий М, и такое тоже возможно)
И ничего с этим не поделать, к сожалению.
Может все-таки воспользуюсь способом из статьи, на которую Вы дали ссылку. Подумаю вообщем, как лучше.
Изменено: SevenZZ - 09.02.2019 00:32:40
Страницы: 1
Наверх