Скажите, пожалуйста, имеется ли возможность прописать через VBA такую опцию, как: - автоматическое снятие всех фильтров в документе после закрытия файла; - автоматическое сложение (закрытие) все сгруппированных областей после закрытия файла;
В документе уже имею VBA скрипт на "запароливание" документа при закрытии, может его можно как-то дополнить, чтобы вышеупомянутые опции работали?
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4"")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
[/vba] Заранее благодарен за помощь!
Здравствуйте,
Скажите, пожалуйста, имеется ли возможность прописать через VBA такую опцию, как: - автоматическое снятие всех фильтров в документе после закрытия файла; - автоматическое сложение (закрытие) все сгруппированных областей после закрытия файла;
В документе уже имею VBA скрипт на "запароливание" документа при закрытии, может его можно как-то дополнить, чтобы вышеупомянутые опции работали?
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4"")) With sh .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) On Error Resume Next With sh .ShowAllData 'снятие всех фильтров .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 'сгруппирование .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
[/vba]
Пробуйте так: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) On Error Resume Next With sh .ShowAllData 'снятие всех фильтров .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 'сгруппирование .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Такой вариант. И да, Ким, это все происходит не после закрытия, а до. И еще - Ваш кусок кода нужно вешать на открытие, о чем Андрей ниже и пишет. [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) With sh .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Такой вариант. И да, Ким, это все происходит не после закрытия, а до. И еще - Ваш кусок кода нужно вешать на открытие, о чем Андрей ниже и пишет. [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) With sh .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
SLAVICK, _Boroda_, спасибо ребят, всё отлично работает! Огромное спасибо за помощь!
Единственное, скроллбары не сдвигаются вверх и влево после закрытия и сохранения. Т.е. если я сдвину скроллбары так, что таблицу вообще не будет видно и затем сохранюсь - при открытии таблица будет выглядеть именно так, как я её оставил. Эти скроллбары возможно как-то через VBA прописать, чтобы они в нулевую позицию возвращались?
И еще - Ваш кусок кода нужно вешать на открытие, о чем Андрей ниже и пишет.
Саш, на самом деле тот кусок кода у меня висит и на открытие, и на закрытие: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Unprotect "password" .Protect Password:="password", Scenarios:=True, AllowFiltering:=True .EnableOutlining = True End With Next End Sub
[/vba] Т.е. теперь код выглядит вот так. Работает так, как надо! :P
RAN, ваш намёк понял, исправил! Спасибо!
SLAVICK, _Boroda_, спасибо ребят, всё отлично работает! Огромное спасибо за помощь!
Единственное, скроллбары не сдвигаются вверх и влево после закрытия и сохранения. Т.е. если я сдвину скроллбары так, что таблицу вообще не будет видно и затем сохранюсь - при открытии таблица будет выглядеть именно так, как я её оставил. Эти скроллбары возможно как-то через VBA прописать, чтобы они в нулевую позицию возвращались?
И еще - Ваш кусок кода нужно вешать на открытие, о чем Андрей ниже и пишет.
Саш, на самом деле тот кусок кода у меня висит и на открытие, и на закрытие: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "password" .Protect Password:="password", Userinterfaceonly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Unprotect "password" .Protect Password:="password", Scenarios:=True, AllowFiltering:=True .EnableOutlining = True End With Next End Sub
[/vba] Т.е. теперь код выглядит вот так. Работает так, как надо! :P
If .Name = "Sheet1" Then .Cells(8, "g").Select Else .Cells(8, "f").Select
[/vba]
Не совсем так. У меня на Sheet1 ячейка G8, а на Sheet2 - F8. Тогда так?
[vba]
Код
If .Name = "Sheet1" Then .Cells(8, "G").Select
[/vba] [vba]
Код
If .Name = "Sheet2" Then .Cells(8, "F").Select
[/vba] Т.е. как бы две сразу строчки подряд в код на закрытие прописать? Или чушь спорол? [moder]Код нужно оформлять кнопкой #. Исправил за Вас.[/moder]
If .Name = "Sheet1" Then .Cells(8, "g").Select Else .Cells(8, "f").Select
[/vba]
Не совсем так. У меня на Sheet1 ячейка G8, а на Sheet2 - F8. Тогда так?
[vba]
Код
If .Name = "Sheet1" Then .Cells(8, "G").Select
[/vba] [vba]
Код
If .Name = "Sheet2" Then .Cells(8, "F").Select
[/vba] Т.е. как бы две сразу строчки подряд в код на закрытие прописать? Или чушь спорол? [moder]Код нужно оформлять кнопкой #. Исправил за Вас.[/moder]KIMVSR
Сообщение отредактировал SLAVICK - Вторник, 05.04.2016, 15:36
Работает, но не совсем так, как надо. Постараюсь объяснить: У меня два листа (Sheet1 и Sheet2). На обоих листах есть таблицы. Предположим, я сдвигаю скролл-бар на Sheet1 и затем перехожу на Sheet2 - там тоже сдвигаю скролл-бар. Затем я закрываю файл, находясь на листе Sheet2. Скрипт для Sheet2 срабатывает отлично: скролл-бар возвращается в указанную ячейку, скажем так. Но вот сдвинутый скролл-бар на Sheet1 так и остаётся в сдвинутом положении после закрытия.
Короче говоря, код срабатывает только на том листе, на котором я нахожусь во время закрытия файла. А я бы хотел, чтобы при закрытии скролл-бары обоих листов возвращались в исходную позицию. Такое возможно?
Работает, но не совсем так, как надо. Постараюсь объяснить: У меня два листа (Sheet1 и Sheet2). На обоих листах есть таблицы. Предположим, я сдвигаю скролл-бар на Sheet1 и затем перехожу на Sheet2 - там тоже сдвигаю скролл-бар. Затем я закрываю файл, находясь на листе Sheet2. Скрипт для Sheet2 срабатывает отлично: скролл-бар возвращается в указанную ячейку, скажем так. Но вот сдвинутый скролл-бар на Sheet1 так и остаётся в сдвинутом положении после закрытия.
Короче говоря, код срабатывает только на том листе, на котором я нахожусь во время закрытия файла. А я бы хотел, чтобы при закрытии скролл-бары обоих листов возвращались в исходную позицию. Такое возможно?KIMVSR
Сообщение отредактировал KIMVSR - Вторник, 05.04.2016, 15:52
Саш, твой вариант не работал, к сожалению. Т.е. всё было точно также, как и с ифом (срабатывал только на активном листе). SLAVICK, работает так, как надо! Здорово!
Ребят, большущие вам спасибо!
Саш, твой вариант не работал, к сожалению. Т.е. всё было точно также, как и с ифом (срабатывал только на активном листе). SLAVICK, работает так, как надо! Здорово!