Пожалуйста, помогите видоизменить макрос таким образом, чтобы появилась возможность добавления/удаления строк на заблокированном листе (protected sheet).
[vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) xWs.Protect Password:=xPws, Userinterfaceonly:=True xWs.EnableOutlining = True End Sub
[/vba]
На данный момент такой возможности нет - лист заблокирован полностью. Буду очень признателен за помощь, т.к. сам в VBA полнейший дилетант.
Здравствуйте,
Пожалуйста, помогите видоизменить макрос таким образом, чтобы появилась возможность добавления/удаления строк на заблокированном листе (protected sheet).
[vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) xWs.Protect Password:=xPws, Userinterfaceonly:=True xWs.EnableOutlining = True End Sub
[/vba]
На данный момент такой возможности нет - лист заблокирован полностью. Буду очень признателен за помощь, т.к. сам в VBA полнейший дилетант.KIMVSR
Нажимаю ALT + F11 для запуска макроса. Жму F5, открывается окно для ввода пароля. Ввожу пароль, но случайно или специально жму кнопку Cancel (отменить).
Как можно видеть на картинке выше, лист не заблокирован. Пароль введён, но я нажимаю "Отмена". Происходит следующее:
Макрос всё равно сработал и заблокировал лист, несмотря на то, что я жал "Отмена".
Затем я пытаюсь разблокировать лист, нажав кнопку "Unprotect sheet". В результате всегда выдаёт ошибку:
Цитата
"The password you supplied is nor correct. Verify that the CAPS LOCK key if off and be sure to use the correct capitalization."
Причём не важно, какой пароль ты вводишь. Ошибка вылетает в любом случае и лист разблокировать не возможно.
Можно ли как-то видоизменить макрос, чтобы при нажатии кнопки "Отмена" макрос не срабатывал и не блокировал страницу с неизвестным паролем?
Ребят, а как быть с такой проблемой:
Нажимаю ALT + F11 для запуска макроса. Жму F5, открывается окно для ввода пароля. Ввожу пароль, но случайно или специально жму кнопку Cancel (отменить).
Как можно видеть на картинке выше, лист не заблокирован. Пароль введён, но я нажимаю "Отмена". Происходит следующее:
Макрос всё равно сработал и заблокировал лист, несмотря на то, что я жал "Отмена".
Затем я пытаюсь разблокировать лист, нажав кнопку "Unprotect sheet". В результате всегда выдаёт ошибку:
Цитата
"The password you supplied is nor correct. Verify that the CAPS LOCK key if off and be sure to use the correct capitalization."
Причём не важно, какой пароль ты вводишь. Ошибка вылетает в любом случае и лист разблокировать не возможно.
Можно ли как-то видоизменить макрос, чтобы при нажатии кнопки "Отмена" макрос не срабатывал и не блокировал страницу с неизвестным паролем?KIMVSR
Можно ли как-то изменить макрос, чтобы он не запускался повторно в случае, если страница уже заблокирована?
Перед строкой с InputBox добавьте: [vba]
Код
If xWs.ProtectScenarios Then MsgBox "Лист уже защищен", vbExclamation, xTitleId: Exit Sub
[/vba] Короче, должно быть так: [vba]
Код
If xWs.ProtectScenarios Then MsgBox "Лист уже защищен", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub
Можно ли как-то изменить макрос, чтобы он не запускался повторно в случае, если страница уже заблокирована?
Перед строкой с InputBox добавьте: [vba]
Код
If xWs.ProtectScenarios Then MsgBox "Лист уже защищен", vbExclamation, xTitleId: Exit Sub
[/vba] Короче, должно быть так: [vba]
Код
If xWs.ProtectScenarios Then MsgBox "Лист уже защищен", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub
KSV, огромное вам человеческое спасибо! Вы меня очень выручили!
Теперь всё работает так, как должно работать!
Но есть одна достаточно серьёзная и неприятная проблемка:
Макро сбрасывается после закрытия документа.
[vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String If xWs.ProtectScenarios Then MsgBox "Hmmm, It seems that the sheet is already protected! ;-)", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub xWs.Protect Password:=xPws, Userinterfaceonly:=True, AllowInsertingRows:=True, AllowDeletingRows:=True xWs.EnableOutlining = True End Sub
[/vba] Получается такая ситуация: я запускаю макро, ставлю пароль. Кнопки "+" и "-" работают отлично, т.е. структура листа меняется без проблем. Сохраняю документ, закрываю его. Открываю заново и кнопки "+" и "-" уже не работают, но лист остаётся под паролем.
Чтобы кнопки "+" и "-" снова заработали, необходимо снято пароль! :-)
Но тогда теряется весь смысл макроса, т.к. пароль будет знать лишь один человек, а таблицей будут пользоваться сразу несколько.
Возможно ли как-то сделать так, чтобы кнопки "+" и "-" работали и после закрытия/открытия файла?
KSV, огромное вам человеческое спасибо! Вы меня очень выручили!
Теперь всё работает так, как должно работать!
Но есть одна достаточно серьёзная и неприятная проблемка:
Макро сбрасывается после закрытия документа.
[vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String If xWs.ProtectScenarios Then MsgBox "Hmmm, It seems that the sheet is already protected! ;-)", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub xWs.Protect Password:=xPws, Userinterfaceonly:=True, AllowInsertingRows:=True, AllowDeletingRows:=True xWs.EnableOutlining = True End Sub
[/vba] Получается такая ситуация: я запускаю макро, ставлю пароль. Кнопки "+" и "-" работают отлично, т.е. структура листа меняется без проблем. Сохраняю документ, закрываю его. Открываю заново и кнопки "+" и "-" уже не работают, но лист остаётся под паролем.
Чтобы кнопки "+" и "-" снова заработали, необходимо снято пароль! :-)
Но тогда теряется весь смысл макроса, т.к. пароль будет знать лишь один человек, а таблицей будут пользоваться сразу несколько.
Возможно ли как-то сделать так, чтобы кнопки "+" и "-" работали и после закрытия/открытия файла?KIMVSR
Сообщение отредактировал KIMVSR - Среда, 15.04.2015, 13:00
Возможно ли как-то сделать так, чтобы кнопки "+" и "-" работали и после закрытия/открытия файла?
Пользоваться структурой на защищенном листе не получится, нужно будет снимать защиту при открытии книги (или активации листа), а при закрытии книги (или деактивации листа) заново его ставить. Но тогда какой смысл от такой защиты?
Возможно ли как-то сделать так, чтобы кнопки "+" и "-" работали и после закрытия/открытия файла?
Пользоваться структурой на защищенном листе не получится, нужно будет снимать защиту при открытии книги (или активации листа), а при закрытии книги (или деактивации листа) заново его ставить. Но тогда какой смысл от такой защиты? KSV
Блин, всегда думал, что нельзя... Оказывается - МОЖНО! Только защиту нужно ставить вот так: [vba]
Код
Sub Protect_and_Structure() ActiveSheet.EnableOutlining = True ActiveSheet.Protect Contents:=True, Scenarios:=True, UserinterfaceOnly:=True End Sub
[/vba]
В вашем случае это будет так: [vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String If xWs.ProtectScenarios Then MsgBox "Hmmm, It seems that the sheet is already protected! ;-)", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub With xWs .EnableOutlining = True .Protect Password:=xPws, Contents:=True, Scenarios:=True, Userinterfaceonly:=True, AllowInsertingRows:=True, AllowDeletingRows:=True End With End Sub
Блин, всегда думал, что нельзя... Оказывается - МОЖНО! Только защиту нужно ставить вот так: [vba]
Код
Sub Protect_and_Structure() ActiveSheet.EnableOutlining = True ActiveSheet.Protect Contents:=True, Scenarios:=True, UserinterfaceOnly:=True End Sub
[/vba]
В вашем случае это будет так: [vba]
Код
Sub EnableOutlining() 'Update 20140603 Dim xWs As Worksheet Set xWs = Application.ActiveSheet Dim xPws As String If xWs.ProtectScenarios Then MsgBox "Hmmm, It seems that the sheet is already protected! ;-)", vbExclamation, xTitleId: Exit Sub xPws = Application.InputBox("Password:", xTitleId, "", Type:=2) If xPws = "False" Then Exit Sub With xWs .EnableOutlining = True .Protect Password:=xPws, Contents:=True, Scenarios:=True, Userinterfaceonly:=True, AllowInsertingRows:=True, AllowDeletingRows:=True End With End Sub
Александр, то что можно снимать защиту при открытии - знают все (я об этом и написал в сообщении 9) Но тогда теряется смысл защиты... А вот если сначала разрешить .EnableOutlining, а потом поставить защиту с Userinterfaceonly:=True, то и лист остается защищенным, и структурой можно пользоваться. [p.s.]Хотя, сейчас попробовал, как было у него (.EnableOutlining после .Protect) - тоже сработало. Не знаю почему у него не работало... [vba]
Код
With ActiveSheet .Protect "22", Userinterfaceonly:=True .EnableOutlining = True End With
[/vba]
Александр, то что можно снимать защиту при открытии - знают все (я об этом и написал в сообщении 9) Но тогда теряется смысл защиты... А вот если сначала разрешить .EnableOutlining, а потом поставить защиту с Userinterfaceonly:=True, то и лист остается защищенным, и структурой можно пользоваться. [p.s.]Хотя, сейчас попробовал, как было у него (.EnableOutlining после .Protect) - тоже сработало. Не знаю почему у него не работало... [vba]
Код
With ActiveSheet .Protect "22", Userinterfaceonly:=True .EnableOutlining = True End With
Не нужно путать картошку с мороженым: UserinterfaceOnly- защита не распространяется на действие макросов; EnableOutlining - снятие запрета на пользование группировкой на защищенном листе.
Нам нужно только EnableOutlining, а UserinterfaceOnly - это так, для данного вопроса не очень уж и нужно.
Не нужно путать картошку с мороженым: UserinterfaceOnly- защита не распространяется на действие макросов; EnableOutlining - снятие запрета на пользование группировкой на защищенном листе.
Нам нужно только EnableOutlining, а UserinterfaceOnly - это так, для данного вопроса не очень уж и нужно._Boroda_
Александр, да, это понятно... Просто я подумал, что EnableOutlining ПЕРЕД Protect добавил второму какой-то "магический" эффект... [p.s.]Внимательно посмотрел Ваш код в сообщении 8, и наконец-то понял, что Вы имели ввиду.
Александр, да, это понятно... Просто я подумал, что EnableOutlining ПЕРЕД Protect добавил второму какой-то "магический" эффект... [p.s.]Внимательно посмотрел Ваш код в сообщении 8, и наконец-то понял, что Вы имели ввиду.KSV
Всем добрый день. НЕ знаю, "живет" ли еще кто-нибудь в темах Но без помощи мне не справиться. Писала в одну тему - перенаправили сюда. Мне достался в наследство файл "спецификация" с макросом (фильтрация). Кто и когда его создавал уже никто не помнит, поэтому мне приходится с ним работать методом проб и ошибок. Ну не в этом суть. Проблема в следующем: надо защитить лист от нежелательных изменений, например, чтобы не меняли цену и т.п. Но, при защите листа макрос не работает. Я уже готова была от него отказаться и удалить к чертям собачим, но оказалось, что группировка/разгруппировка тоже не работает. Теперь дело принципа - докопаться. Что я только не перечитала, иногда казалось, что истина где-то рядом, но, чем больше читаю, тем больше запутываюсь, т.к. многих определений не понимаю. На указанные выше ссылки (Как защить лист от пользователя, но не от макроса и Как оставить возможность группировки) заходила. Но не понимаю как это прописать в существующем макросе... ПОМОГИТЕ! Или подскажите, в какую тему обратиться Ну. пожалуйста... Ну вот, даже файл как приложение не знаю. как прикрепить.... В XLS файл не пересохраняется... МОгу скинуть на почту тому, кто возьмется помочь
Всем добрый день. НЕ знаю, "живет" ли еще кто-нибудь в темах Но без помощи мне не справиться. Писала в одну тему - перенаправили сюда. Мне достался в наследство файл "спецификация" с макросом (фильтрация). Кто и когда его создавал уже никто не помнит, поэтому мне приходится с ним работать методом проб и ошибок. Ну не в этом суть. Проблема в следующем: надо защитить лист от нежелательных изменений, например, чтобы не меняли цену и т.п. Но, при защите листа макрос не работает. Я уже готова была от него отказаться и удалить к чертям собачим, но оказалось, что группировка/разгруппировка тоже не работает. Теперь дело принципа - докопаться. Что я только не перечитала, иногда казалось, что истина где-то рядом, но, чем больше читаю, тем больше запутываюсь, т.к. многих определений не понимаю. На указанные выше ссылки (Как защить лист от пользователя, но не от макроса и Как оставить возможность группировки) заходила. Но не понимаю как это прописать в существующем макросе... ПОМОГИТЕ! Или подскажите, в какую тему обратиться Ну. пожалуйста... Ну вот, даже файл как приложение не знаю. как прикрепить.... В XLS файл не пересохраняется... МОгу скинуть на почту тому, кто возьмется помочьТанчик