Страницы: 1
RSS
Дополнить, либо переписать макрос очистки ячеек
 
У меня есть такой марос:  
Sub DEL_All()  
If InputBox("Вы желаете очистить все таблицы, на всех листах, от данных?" & vbCrLf & "ВНИМАНИЕ! Обратить изменение невозможно!" & vbCrLf & "Для подтверждения введите: 0", "Защита от случайных нажатий") <> "0" Then Exit Sub  
Sheets("Лист1").Range("D18:R21,T18:AI21,AR18:AS21") = Empty  
Sheets("Лист1").Range("D23:R38,T23:AI38,AR23:AS38") = Empty  
Sheets("Лист2").Range("D13:R20,T13:AI20,AR13:AS20") = Empty  
Sheets("Лист2").Range("D36:R39,T36:AI39,R36:AS39") = Empty  
Sheets("Лист3").Range("D14:R81,T14:AI81,AR14:AS81") = Empty  
Sheets("Лист4").Range("D13:R52,T13:AI52,AR13:AS52") = Empty  
Sheets("Лист5").Range("D13:R52,T13:AI52,AR13:AS52") = Empty  
Sheets("Лист6").Range("D18:R27,T18:AI27") = Empty  
Sheets("Лист6").Range("D31:R38,T31:AI38") = Empty  
Sheets("Лист6").Range("D42:R101,T42:AI101") = Empty  
Sheets("Лист6").Range("D105:R154,T105:AI154") = Empty  
Sheets("Лист6").Range("D158:R197,T158:AI197") = Empty  
End Sub  
И вот проблема. Раньше этот макрос всем устраивал, но в последнее время в объединённых ячейках(в диапазонах AR:AS), по не понятным мне причинам, ода из ячеек становится защищённой (при защищённом паролем листе)[т.е. если снять защиту и смотреть свойства ячейки(объединённой), то во вкладке защита будет квадратик]. И этот макрос натыкаясь на такую ячейку выдаёт ошибку(мол, снимите защиту сперва).
 
Вопрос: как сделать так, чтобы макрос сначала снимал парольную защиту, на тех листах, где она есть, потом очищал, потом снова ставил её на теже листы.  
 
Я подумал и другом решении. Может проще сделать так, чтобы перед очисткой, макрос снимал фалжки(Selection.Locked = False) в ячейках очищаемых диапазонов. Но как это сделать не знаю.  
Помогите!
 
{quote}{login=Алексей.Ю.}{date=18.09.2010 09:22}{thema=Дополнить, либо переписать макрос очистки ячеек}{post}У меня есть такой марос:  
Sub DEL_All()  
If InputBox("Вы желаете очистить все таблицы, на всех листах, от данных?" & vbCrLf & "ВНИМАНИЕ! Обратить изменение невозможно!" & vbCrLf & "Для подтверждения введите: 0", "Защита от случайных нажатий") <> "0" Then Exit Sub  
Sheets("Лист1").Range("D18:R21,T18:AI21,AR18:AS21") = Empty  
Sheets("Лист1").Range("D23:R38,T23:AI38,AR23:AS38") = Empty  
Sheets("Лист2").Range("D13:R20,T13:AI20,AR13:AS20") = Empty  
Sheets("Лист2").Range("D36:R39,T36:AI39,R36:AS39") = Empty  
Sheets("Лист3").Range("D14:R81,T14:AI81,AR14:AS81") = Empty  
Sheets("Лист4").Range("D13:R52,T13:AI52,AR13:AS52") = Empty  
Sheets("Лист5").Range("D13:R52,T13:AI52,AR13:AS52") = Empty  
Sheets("Лист6").Range("D18:R27,T18:AI27") = Empty  
Sheets("Лист6").Range("D31:R38,T31:AI38") = Empty  
Sheets("Лист6").Range("D42:R101,T42:AI101") = Empty  
Sheets("Лист6").Range("D105:R154,T105:AI154") = Empty  
Sheets("Лист6").Range("D158:R197,T158:AI197") = Empty  
End Sub  
И вот проблема. Раньше этот макрос всем устраивал, но в последнее время в объединённых ячейках(в диапазонах AR:AS), по не понятным мне причинам, ода из ячеек становится защищённой (при защищённом паролем листе)[т.е. если снять защиту и смотреть свойства ячейки(объединённой), то во вкладке защита будет квадратик]. И этот макрос натыкаясь на такую ячейку выдаёт ошибку(мол, снимите защиту сперва).
 
Вопрос: как сделать так, чтобы макрос сначала снимал парольную защиту, на тех листах, где она есть, потом очищал, потом снова ставил её на теже листы.  
 
Я подумал и другом решении. Может проще сделать так, чтобы перед очисткой, макрос снимал фалжки(Selection.Locked = False) в ячейках очищаемых диапазонов. Но как это сделать не знаю.  
Помогите!{/post}{/quote}  
так переберите циклом листы и снимите защиту  
unprotect  
а затем поставьте  
protect
Спасибо
 
{quote}{login=R Dmitry}{date=18.09.2010 09:44}{thema=Re: Дополнить, либо переписать макрос очистки ячеек}{post}так переберите циклом листы и снимите защиту  
unprotect  
а затем поставьте  
protect{/post}{/quote}  
 
ААА! ЧИВО!  
может пример дадите
 
Dim wsheet As Worksheet  
For Each wsheet In ActiveWorkbook.Sheets  
wsheet unprotect  
Next wsheet  
это в начале модуля  
 
For Each wsheet In ActiveWorkbook.Sheets  
wsheet protect  
Next wsheet  
это в конце
Спасибо
 
{quote}{login=R Dmitry}{date=18.09.2010 09:51}{thema=}{post}Dim wsheet As Worksheet  
For Each wsheet In ActiveWorkbook.Sheets  
wsheet unprotect  
Next wsheet  
это в начале модуля  
 
For Each wsheet In ActiveWorkbook.Sheets  
wsheet protect  
Next wsheet  
это в конце{/post}{/quote}  
wsheet.protect  
wsheet.unprotect  
точки пропустил ну и соответственно ваш пароль после этих слов
Спасибо
 
Нет, не работает. Защита парольная. Добавляю к Unprotect Password:="0" - ругается.  
 
Может пожскажите что-нибудь по 2ому варианту: "...перед очисткой, макрос снимал фалжки(Selection.Locked = False) в ячейках очищаемых диапазонов"
 
{quote}{login=Алексей.Ю.}{date=18.09.2010 10:03}{thema=RE: R Dmitry}{post}Нет, не работает. Защита парольная. Добавляю к Unprotect Password:="0" - ругается.  
 
Может пожскажите что-нибудь по 2ому варианту: "...перед очисткой, макрос снимал фалжки(Selection.Locked = False) в ячейках очищаемых диапазонов"{/post}{/quote}  
да все должно работать  
можно Unprotect 0 (если пароль 0)на всех листах  
а по второму варианту вам все равно надо сначала снять защиту листа а затем ячейки
Спасибо
 
Unprotect "0"  
а еще лучше ваш файл бросьте
Спасибо
 
Джедай-макрос Прист, уже в который раз - поклон вам. Сделал, получилось. Работает нормально. R Dmitry и Вам спасибки.  
 
Причину не знаю. НО попытаюсь выяснить.
 
{quote}{login=Алексей.Ю.}{date=18.09.2010 10:25}{thema=The_Prist & R Dmitry}{post}Джедай-макрос Прист, уже в который раз - поклон вам. Сделал, получилось. Работает нормально. R Dmitry и Вам спасибки.  
 
Причину не знаю. НО попытаюсь выяснить.{/post}{/quote}  
мой способ ничем не отличается от способа Дмитрия
Страницы: 1
Читают тему
Loading...