Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разграничение прав доступа по логину - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разграничение прав доступа по логину (Макросы/Sub)
Разграничение прав доступа по логину
ArkaIIIa Дата: Пятница, 26.02.2016, 09:37 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 873
Репутация: 115 ±
Замечаний: 0% ±

2010
Добрый день, уважаемые господа!

В свое время на этом чудесном сайте подглядел следующий код:
[vba]
Код
Private Sub Workbook_Open()
    If Environ("USERNAME") <> "ivanov-pi" Then
        Worksheets(1).Visible = xlVeryHidden
        Worksheets(2).Visible = xlVeryHidden
        Worksheets(3).Visible = xlVeryHidden
    Else
        For i = 1 To Worksheets.Count
            Worksheets(i).Visible = True
        Next i
    End If
End Sub
[/vba]

Суть его работы - если системное имя "открывателя" файла не "ivanov-pi", то листы 1,2,3 становятся "супер-скрытыми", в противном случае все листы видимы.
Попытался применить его к нужному файлу и столкнулся со следующей проблемой.
Если намеренно исказить имя в коде макроса на, к примеру, "ivanov-p", то при открытии файла (с моего компьютера - "ivanov-pi") листы 1,2,3 скрываются (что правильно).
Однако, если открывать файл с компьютера другого пользователя, имя которого, условно, "petrov-pi", то у него все листы видимые.
В чем может быть проблема?

Заранее благодарю!


Сообщение отредактировал ArkaIIIa - Пятница, 26.02.2016, 09:43
 
Ответить
СообщениеДобрый день, уважаемые господа!

В свое время на этом чудесном сайте подглядел следующий код:
[vba]
Код
Private Sub Workbook_Open()
    If Environ("USERNAME") <> "ivanov-pi" Then
        Worksheets(1).Visible = xlVeryHidden
        Worksheets(2).Visible = xlVeryHidden
        Worksheets(3).Visible = xlVeryHidden
    Else
        For i = 1 To Worksheets.Count
            Worksheets(i).Visible = True
        Next i
    End If
End Sub
[/vba]

Суть его работы - если системное имя "открывателя" файла не "ivanov-pi", то листы 1,2,3 становятся "супер-скрытыми", в противном случае все листы видимы.
Попытался применить его к нужному файлу и столкнулся со следующей проблемой.
Если намеренно исказить имя в коде макроса на, к примеру, "ivanov-p", то при открытии файла (с моего компьютера - "ivanov-pi") листы 1,2,3 скрываются (что правильно).
Однако, если открывать файл с компьютера другого пользователя, имя которого, условно, "petrov-pi", то у него все листы видимые.
В чем может быть проблема?

Заранее благодарю!

Автор - ArkaIIIa
Дата добавления - 26.02.2016 в 09:37
_Boroda_ Дата: Пятница, 26.02.2016, 09:45 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11327
Репутация: 4676 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Могу предположить, что другой пользователь просто не включил макросы.
Я бы сделал скрытие листов не при открытии, а при закрытии и сохранении файла. А при открытии делаем проверку на Иванова и, в случае совпадения, показываем листы.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМогу предположить, что другой пользователь просто не включил макросы.
Я бы сделал скрытие листов не при открытии, а при закрытии и сохранении файла. А при открытии делаем проверку на Иванова и, в случае совпадения, показываем листы.

Автор - _Boroda_
Дата добавления - 26.02.2016 в 09:45
ArkaIIIa Дата: Пятница, 26.02.2016, 09:51 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 873
Репутация: 115 ±
Замечаний: 0% ±

2010
_Boroda_
Тоже проскакивала мысль про отключенные макросы, но, проверил сам - макросы включены.
На закрытие - хорошая идея. Сделаю. Спасибо, Александр!
 
Ответить
Сообщение_Boroda_
Тоже проскакивала мысль про отключенные макросы, но, проверил сам - макросы включены.
На закрытие - хорошая идея. Сделаю. Спасибо, Александр!

Автор - ArkaIIIa
Дата добавления - 26.02.2016 в 09:51
RAN Дата: Пятница, 26.02.2016, 09:56 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4533
Репутация: 920 ±
Замечаний: 0% ±

2010
На закрытие - хорошая идея

Это не "хорошая идея". Это единственно верное решение в данном случае.
Один минус - файл нельзя закрыть без сохранения.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
На закрытие - хорошая идея

Это не "хорошая идея". Это единственно верное решение в данном случае.
Один минус - файл нельзя закрыть без сохранения.

Автор - RAN
Дата добавления - 26.02.2016 в 09:56
SLAVICK Дата: Пятница, 26.02.2016, 10:59 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2003
Репутация: 673 ±
Замечаний: 0% ±

2007,2010,2013,2016
Это единственно верное решение в данном случае

100% но я у себя сделал двойную проверку(на всякий случай) - и на закрытие - и на открытие(вдруг не сохранят при закрытии) - так оно надежнее будет.
Хотя такую защиту можно обойти макросом в три строки :D - но это уже темы не касается от простых пользователей - поможет ;)

Если есть возможность лучше еще и защиту книги и этих листов впаять, как- то так:
[vba]
Код
Private Sub PassOn()
Dim MyPassWord As String
Dim wsh As Worksheet
ThisWorkbook.Unprotect ThisWorkbook.Sheets(" ").Range("a1")
MyPassWord = ThisWorkbook.Sheets(" ").Range("a2")
For Each wsh In ThisWorkbook.Worksheets
If wsh.Visible = xlSheetVisible Then
    If Not wsh.Name = "1" And Not wsh.Name = "Лист1" Then
    wsh.Protect Password:=MyPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowUsingPivotTables:=True
    wsh.EnableSelection = xlNoSelection
    wsh.Visible = xlSheetVeryHidden
    End If
End If
Next
ThisWorkbook.Protect ThisWorkbook.Sheets(" ").Range("a1"), Structure:=True, Windows:=False
End Sub

Private Sub PassOff()
Dim MyPassWord As String
Dim wsh As Worksheet
ThisWorkbook.Unprotect ThisWorkbook.Sheets(" ").Range("a1")
MyPassWord = ThisWorkbook.Sheets(" ").Range("a2")

For Each wsh In ThisWorkbook.Worksheets
    wsh.Unprotect Password:=MyPassWord
    wsh.Visible = xlSheetVisible
Next
End Sub
[/vba]
Тогда увидеть такие листы будет на порядок сложнее :D
ЗЫ и модуль обязательно защитить yes
К сообщению приложен файл: secure.xlsm(25Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Это единственно верное решение в данном случае

100% но я у себя сделал двойную проверку(на всякий случай) - и на закрытие - и на открытие(вдруг не сохранят при закрытии) - так оно надежнее будет.
Хотя такую защиту можно обойти макросом в три строки :D - но это уже темы не касается от простых пользователей - поможет ;)

Если есть возможность лучше еще и защиту книги и этих листов впаять, как- то так:
[vba]
Код
Private Sub PassOn()
Dim MyPassWord As String
Dim wsh As Worksheet
ThisWorkbook.Unprotect ThisWorkbook.Sheets(" ").Range("a1")
MyPassWord = ThisWorkbook.Sheets(" ").Range("a2")
For Each wsh In ThisWorkbook.Worksheets
If wsh.Visible = xlSheetVisible Then
    If Not wsh.Name = "1" And Not wsh.Name = "Лист1" Then
    wsh.Protect Password:=MyPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowUsingPivotTables:=True
    wsh.EnableSelection = xlNoSelection
    wsh.Visible = xlSheetVeryHidden
    End If
End If
Next
ThisWorkbook.Protect ThisWorkbook.Sheets(" ").Range("a1"), Structure:=True, Windows:=False
End Sub

Private Sub PassOff()
Dim MyPassWord As String
Dim wsh As Worksheet
ThisWorkbook.Unprotect ThisWorkbook.Sheets(" ").Range("a1")
MyPassWord = ThisWorkbook.Sheets(" ").Range("a2")

For Each wsh In ThisWorkbook.Worksheets
    wsh.Unprotect Password:=MyPassWord
    wsh.Visible = xlSheetVisible
Next
End Sub
[/vba]
Тогда увидеть такие листы будет на порядок сложнее :D
ЗЫ и модуль обязательно защитить yes

Автор - SLAVICK
Дата добавления - 26.02.2016 в 10:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разграничение прав доступа по логину (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!