Помогите, пожалуйста, с такой вот проблемкой: Есть документ, в нём я использую группировку. Т.к. функция защиты листа не работает с группировкой, я применяю макрос:
[vba]
Код
Private Sub Workbook_Open() With Sheets("Sheet1") .Protect Password:="password", Userinterfaceonly:=True .EnableOutlining = True End With
[/vba] Всё отлично работает, пароль сохраняется и даёт использовать кнопки группировки. Но после перезагрузки документа перестают работать кнопки фильтрации. Хотя если лист заблокировать паролем и не перезагружать файл - кнопки фильтрации работают отлично.
Подумал, что проблема может быть в этом:
Меняю EnableAutoFilter на True, сохраняюсь, делаю перезагрузку документа и опять эта позиция слетает на False.
Во время блокировки ставлю галочку:
Т.е. я уже перепробовал всё, что только можно, но после перезагрузки документа кнопки фильтрации не кликабельны. К теме цепляю файл с примером.
Подскажите, пожалуйста, где собака зарыта? Или нужно какую-то дополнительную строчку в скриптах прописывать, чтобы эта функция активировалась после рестарта файла?
Заранее спасибо!
Привет, ребят!
Помогите, пожалуйста, с такой вот проблемкой: Есть документ, в нём я использую группировку. Т.к. функция защиты листа не работает с группировкой, я применяю макрос:
[vba]
Код
Private Sub Workbook_Open() With Sheets("Sheet1") .Protect Password:="password", Userinterfaceonly:=True .EnableOutlining = True End With
[/vba] Всё отлично работает, пароль сохраняется и даёт использовать кнопки группировки. Но после перезагрузки документа перестают работать кнопки фильтрации. Хотя если лист заблокировать паролем и не перезагружать файл - кнопки фильтрации работают отлично.
Подумал, что проблема может быть в этом:
Меняю EnableAutoFilter на True, сохраняюсь, делаю перезагрузку документа и опять эта позиция слетает на False.
Во время блокировки ставлю галочку:
Т.е. я уже перепробовал всё, что только можно, но после перезагрузки документа кнопки фильтрации не кликабельны. К теме цепляю файл с примером.
Подскажите, пожалуйста, где собака зарыта? Или нужно какую-то дополнительную строчку в скриптах прописывать, чтобы эта функция активировалась после рестарта файла?
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. Пробуйте так: [vba]
Код
Private Sub Workbook_Open() With Sheets("Skills") .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, DrawingObjects:=True, _ Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With End Sub
[/vba]
Даже достаточно просто: [vba]
Код
With Sheets("Skills") .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. Пробуйте так: [vba]
Код
Private Sub Workbook_Open() With Sheets("Skills") .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, DrawingObjects:=True, _ Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With End Sub
[/vba]
Даже достаточно просто: [vba]
Код
With Sheets("Skills") .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With
[/vba] Это я со своего файла настройки дернул.SLAVICK
А, вот чего. Ну да. И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave А на открытие - как Славик написал.
А, вот чего. Ну да. И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave А на открытие - как Славик написал._Boroda_
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. Пробуйте так:
Ну так ведь фильтр работает, когда я ставлю блокировку на лист. Поставив галочку на Allow use autofilter - я наоборот разрешаю его использовать. Хотя это ничего не меняло, эффект был одинаковым. Он перестаёт работать именно после перезагрузки файла. Я понимаю, если бы он сразу переставал работать, так ведь нет, всё надо усложнить! :D Огромное вам спасибо за скриптик, теперь всё работает красиво!
И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave
Я не совсем понял, Саш. Мне надо так, чтобы пароль стоял, когда файл открывается. Файл юзают много человек, а менять структуру файла и прочее хочу только я. В таком случае всё-равно лучше сделать через Workbook_BeforeSave?
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. Пробуйте так:
Ну так ведь фильтр работает, когда я ставлю блокировку на лист. Поставив галочку на Allow use autofilter - я наоборот разрешаю его использовать. Хотя это ничего не меняло, эффект был одинаковым. Он перестаёт работать именно после перезагрузки файла. Я понимаю, если бы он сразу переставал работать, так ведь нет, всё надо усложнить! :D Огромное вам спасибо за скриптик, теперь всё работает красиво!
И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave
Я не совсем понял, Саш. Мне надо так, чтобы пароль стоял, когда файл открывается. Файл юзают много человек, а менять структуру файла и прочее хочу только я. В таком случае всё-равно лучше сделать через Workbook_BeforeSave?KIMVSR
Сообщение отредактировал KIMVSR - Среда, 02.03.2016, 17:23
Александр - можно я отвечу . Просто потом не будут "плюсики" работать. Нужно будет все равно код для их работы. А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)
Александр - можно я отвечу . Просто потом не будут "плюсики" работать. Нужно будет все равно код для их работы. А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)
А как это лучше сделать, чтобы паролил при открытии и при закрытии, и чтобы плюсики работали? Не могли бы код накидать? Я был бы вам ещё раз очень признателен. [moder]Не нужно цитировать весь пост целиком.[/moder]
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)
А как это лучше сделать, чтобы паролил при открытии и при закрытии, и чтобы плюсики работали? Не могли бы код накидать? Я был бы вам ещё раз очень признателен. [moder]Не нужно цитировать весь пост целиком.[/moder]KIMVSR
Сообщение отредактировал SLAVICK - Среда, 02.03.2016, 17:32
Private Sub Workbook_BeforeClose(Cancel As Boolean) With Sheets("Skills") .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End With End Sub
[/vba]
Александр уже написал. Я просто код кину: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) With Sheets("Skills") .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End With End Sub
Если у Вас не все листы, а, например, 3 из 20, то можно так [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Protect Password:="password1", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Sheets("Sheet2").Protect Password:="password2", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Sheets("Sheet3").Protect Password:="password3", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End Sub
[/vba] Если все, то что-то типа вот этого [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) sc_ = ActiveWorkbook.Worksheets.Count For i = 1 To sc_ Sheets(i).Protect Password:="password" & i, Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Next i End Sub
[/vba] В обоих макросах на каждый лист свой пароль - password1-2-3-...
Если у Вас не все листы, а, например, 3 из 20, то можно так [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Protect Password:="password1", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Sheets("Sheet2").Protect Password:="password2", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Sheets("Sheet3").Protect Password:="password3", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End Sub
[/vba] Если все, то что-то типа вот этого [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) sc_ = ActiveWorkbook.Worksheets.Count For i = 1 To sc_ Sheets(i).Protect Password:="password" & i, Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True Next i End Sub
[/vba] В обоих макросах на каждый лист свой пароль - password1-2-3-..._Boroda_
Private Sub Workbook_BeforeClose(Cancel As Boolean) For Each sh In ThisWorkbook.Sheets(Array("Skills", "Лист1", "Лист2")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End With Next End Sub Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Skills", "Лист1", "Лист2")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With Next End Sub
[/vba]
Используйте For Each [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) For Each sh In ThisWorkbook.Sheets(Array("Skills", "Лист1", "Лист2")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True End With Next End Sub Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Skills", "Лист1", "Лист2")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True .EnableOutlining = True End With Next End Sub