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

Вход

Регистрация

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

 

= Мир MS Excel/Автофильтр не хочет работать после перезагрузки документа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автофильтр не хочет работать после перезагрузки документа (Макросы/Sub)
Автофильтр не хочет работать после перезагрузки документа
KIMVSR Дата: Среда, 02.03.2016, 17:03 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Привет, ребят!

Помогите, пожалуйста, с такой вот проблемкой:
Есть документ, в нём я использую группировку.
Т.к. функция защиты листа не работает с группировкой, я применяю макрос:

[vba]
Код
Private Sub Workbook_Open()
With Sheets("Sheet1")
       .Protect Password:="password", Userinterfaceonly:=True
       .EnableOutlining = True
End With
[/vba]
Всё отлично работает, пароль сохраняется и даёт использовать кнопки группировки.
Но после перезагрузки документа перестают работать кнопки фильтрации.
Хотя если лист заблокировать паролем и не перезагружать файл - кнопки фильтрации работают отлично.

Подумал, что проблема может быть в этом:


Меняю EnableAutoFilter на True, сохраняюсь, делаю перезагрузку документа и опять эта позиция слетает на False.

Во время блокировки ставлю галочку:


Т.е. я уже перепробовал всё, что только можно, но после перезагрузки документа кнопки фильтрации не кликабельны.
К теме цепляю файл с примером.

Подскажите, пожалуйста, где собака зарыта? Или нужно какую-то дополнительную строчку в скриптах прописывать, чтобы эта функция активировалась после рестарта файла?

Заранее спасибо!
К сообщению приложен файл: Example.xlsm (53.0 Kb)


Сообщение отредактировал KIMVSR - Среда, 02.03.2016, 17:05
 
Ответить
СообщениеПривет, ребят!

Помогите, пожалуйста, с такой вот проблемкой:
Есть документ, в нём я использую группировку.
Т.к. функция защиты листа не работает с группировкой, я применяю макрос:

[vba]
Код
Private Sub Workbook_Open()
With Sheets("Sheet1")
       .Protect Password:="password", Userinterfaceonly:=True
       .EnableOutlining = True
End With
[/vba]
Всё отлично работает, пароль сохраняется и даёт использовать кнопки группировки.
Но после перезагрузки документа перестают работать кнопки фильтрации.
Хотя если лист заблокировать паролем и не перезагружать файл - кнопки фильтрации работают отлично.

Подумал, что проблема может быть в этом:


Меняю EnableAutoFilter на True, сохраняюсь, делаю перезагрузку документа и опять эта позиция слетает на False.

Во время блокировки ставлю галочку:


Т.е. я уже перепробовал всё, что только можно, но после перезагрузки документа кнопки фильтрации не кликабельны.
К теме цепляю файл с примером.

Подскажите, пожалуйста, где собака зарыта? Или нужно какую-то дополнительную строчку в скриптах прописывать, чтобы эта функция активировалась после рестарта файла?

Заранее спасибо!

Автор - KIMVSR
Дата добавления - 02.03.2016 в 17:03
SLAVICK Дата: Среда, 02.03.2016, 17:09 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Подскажите, пожалуйста, где собака зарыта?

"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. :D
Пробуйте так:
[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]
Это я со своего файла настройки дернул.
К сообщению приложен файл: 1983121.xlsm (53.5 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 02.03.2016, 17:13
 
Ответить
Сообщение
Подскажите, пожалуйста, где собака зарыта?

"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром. :D
Пробуйте так:
[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
Дата добавления - 02.03.2016 в 17:09
_Boroda_ Дата: Среда, 02.03.2016, 17:11 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А, вот чего. Ну да.
И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave
А на открытие - как Славик написал.


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

Автор - _Boroda_
Дата добавления - 02.03.2016 в 17:11
KIMVSR Дата: Среда, 02.03.2016, 17:21 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром.
Пробуйте так:

Ну так ведь фильтр работает, когда я ставлю блокировку на лист.
Поставив галочку на Allow use autofilter - я наоборот разрешаю его использовать. Хотя это ничего не меняло, эффект был одинаковым.
Он перестаёт работать именно после перезагрузки файла. Я понимаю, если бы он сразу переставал работать, так ведь нет, всё надо усложнить! :D
Огромное вам спасибо за скриптик, теперь всё работает красиво!

И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave

Я не совсем понял, Саш. Мне надо так, чтобы пароль стоял, когда файл открывается.
Файл юзают много человек, а менять структуру файла и прочее хочу только я.
В таком случае всё-равно лучше сделать через Workbook_BeforeSave?


Сообщение отредактировал KIMVSR - Среда, 02.03.2016, 17:23
 
Ответить
Сообщение
"Собака зарыта" в том что Вы не снимая пароль с листа пытаетесь поменять его свойства. И не разрешаете пользоватся фильтром.
Пробуйте так:

Ну так ведь фильтр работает, когда я ставлю блокировку на лист.
Поставив галочку на Allow use autofilter - я наоборот разрешаю его использовать. Хотя это ничего не меняло, эффект был одинаковым.
Он перестаёт работать именно после перезагрузки файла. Я понимаю, если бы он сразу переставал работать, так ведь нет, всё надо усложнить! :D
Огромное вам спасибо за скриптик, теперь всё работает красиво!

И еще - зачем Вы паролите файл при открытии? Парольте при сохранении. На Workbook_BeforeSave

Я не совсем понял, Саш. Мне надо так, чтобы пароль стоял, когда файл открывается.
Файл юзают много человек, а менять структуру файла и прочее хочу только я.
В таком случае всё-равно лучше сделать через Workbook_BeforeSave?

Автор - KIMVSR
Дата добавления - 02.03.2016 в 17:21
SLAVICK Дата: Среда, 02.03.2016, 17:22 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
зачем Вы паролите файл при открытии

Александр - можно я отвечу :D .
Просто потом не будут "плюсики" работать.
Нужно будет все равно код для их работы.
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)

О уже и ответ появился :)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 02.03.2016, 17:23
 
Ответить
Сообщение
зачем Вы паролите файл при открытии

Александр - можно я отвечу :D .
Просто потом не будут "плюсики" работать.
Нужно будет все равно код для их работы.
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)

О уже и ответ появился :)

Автор - SLAVICK
Дата добавления - 02.03.2016 в 17:22
KIMVSR Дата: Среда, 02.03.2016, 17:24 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)


А как это лучше сделать, чтобы паролил при открытии и при закрытии, и чтобы плюсики работали?
Не могли бы код накидать? Я был бы вам ещё раз очень признателен.
[moder]Не нужно цитировать весь пост целиком.[/moder]


Сообщение отредактировал SLAVICK - Среда, 02.03.2016, 17:32
 
Ответить
Сообщение
А вообще лучше паролить при закрытии, и контрольный при открытии(вдруг при закрытии не сохранили.)


А как это лучше сделать, чтобы паролил при открытии и при закрытии, и чтобы плюсики работали?
Не могли бы код накидать? Я был бы вам ещё раз очень признателен.
[moder]Не нужно цитировать весь пост целиком.[/moder]

Автор - KIMVSR
Дата добавления - 02.03.2016 в 17:24
_Boroda_ Дата: Среда, 02.03.2016, 17:32 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В Workbook_BeforeSave ставим просто установку пароля, а в ОУпен - то, что Славик написал.

Или просто строку
[vba]
Код
Sheets("Skills").EnableOutlining = True
[/vba]
Но лучше как Славик.


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

Или просто строку
[vba]
Код
Sheets("Skills").EnableOutlining = True
[/vba]
Но лучше как Славик.

Автор - _Boroda_
Дата добавления - 02.03.2016 в 17:32
SLAVICK Дата: Среда, 02.03.2016, 17:37 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Александр уже написал. :D
Я просто код кину:
[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
[/vba]
К сообщению приложен файл: 1983121-1-.xlsm (53.8 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеАлександр уже написал. :D
Я просто код кину:
[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
[/vba]

Автор - SLAVICK
Дата добавления - 02.03.2016 в 17:37
KIMVSR Дата: Четверг, 03.03.2016, 10:54 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Славик, Саш, большое вам спасибо! Выручили меня в очередной раз!
Подскажите, пожалуйста, ещё такую вещь:

Если я хочу применить этот скрипт для нескольких листов, как по правилам VBA мне это прописать?

[vba]
Код

Private Sub Workbook_Open()
With Sheets("Sheet1", "Sheet2", "Sheet3")
[/vba]
Или же мне надо дублировать скрипт целиком и вставлять его ниже, но уже с другим названием листа?


Сообщение отредактировал KIMVSR - Четверг, 03.03.2016, 10:54
 
Ответить
СообщениеСлавик, Саш, большое вам спасибо! Выручили меня в очередной раз!
Подскажите, пожалуйста, ещё такую вещь:

Если я хочу применить этот скрипт для нескольких листов, как по правилам VBA мне это прописать?

[vba]
Код

Private Sub Workbook_Open()
With Sheets("Sheet1", "Sheet2", "Sheet3")
[/vba]
Или же мне надо дублировать скрипт целиком и вставлять его ниже, но уже с другим названием листа?

Автор - KIMVSR
Дата добавления - 03.03.2016 в 10:54
_Boroda_ Дата: Четверг, 03.03.2016, 11:41 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Если у Вас не все листы, а, например, 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_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕсли у Вас не все листы, а, например, 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_
Дата добавления - 03.03.2016 в 11:41
SLAVICK Дата: Четверг, 03.03.2016, 11:44 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Используйте 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
[/vba]
К сообщению приложен файл: 1983121-1-1-.xlsm (56.6 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 03.03.2016, 11:45
 
Ответить
СообщениеИспользуйте 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
[/vba]

Автор - SLAVICK
Дата добавления - 03.03.2016 в 11:44
KIMVSR Дата: Четверг, 03.03.2016, 12:20 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, SLAVICK, ребят, большое вам человеческое спасибо! pray
Я не знаю, что бы я без вас делал... спасибо! Вы реально крутые! yes
 
Ответить
Сообщение_Boroda_, SLAVICK, ребят, большое вам человеческое спасибо! pray
Я не знаю, что бы я без вас делал... спасибо! Вы реально крутые! yes

Автор - KIMVSR
Дата добавления - 03.03.2016 в 12:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автофильтр не хочет работать после перезагрузки документа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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