В свое время на этом чудесном сайте подглядел следующий код: [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", то у него все листы видимые. В чем может быть проблема?
Заранее благодарю!
Добрый день, уважаемые господа!
В свое время на этом чудесном сайте подглядел следующий код: [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", то у него все листы видимые. В чем может быть проблема?
Могу предположить, что другой пользователь просто не включил макросы. Я бы сделал скрытие листов не при открытии, а при закрытии и сохранении файла. А при открытии делаем проверку на Иванова и, в случае совпадения, показываем листы.
Могу предположить, что другой пользователь просто не включил макросы. Я бы сделал скрытие листов не при открытии, а при закрытии и сохранении файла. А при открытии делаем проверку на Иванова и, в случае совпадения, показываем листы._Boroda_
_Boroda_ Тоже проскакивала мысль про отключенные макросы, но, проверил сам - макросы включены. На закрытие - хорошая идея. Сделаю. Спасибо, Александр!
_Boroda_ Тоже проскакивала мысль про отключенные макросы, но, проверил сам - макросы включены. На закрытие - хорошая идея. Сделаю. Спасибо, Александр!ArkaIIIa
100% но я у себя сделал двойную проверку(на всякий случай) - и на закрытие - и на открытие(вдруг не сохранят при закрытии) - так оно надежнее будет. Хотя такую защиту можно обойти макросом в три строки - но это уже темы не касается от простых пользователей - поможет
Если есть возможность лучше еще и защиту книги и этих листов впаять, как- то так: [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] Тогда увидеть такие листы будет на порядок сложнее ЗЫ и модуль обязательно защитить
100% но я у себя сделал двойную проверку(на всякий случай) - и на закрытие - и на открытие(вдруг не сохранят при закрытии) - так оно надежнее будет. Хотя такую защиту можно обойти макросом в три строки - но это уже темы не касается от простых пользователей - поможет
Если есть возможность лучше еще и защиту книги и этих листов впаять, как- то так: [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] Тогда увидеть такие листы будет на порядок сложнее ЗЫ и модуль обязательно защитить SLAVICK