Страницы: 1
RSS
Как избежать смены листа при снятии защиты.
 
Добрый день!

Столкнулся с неприятной особенностью Excel - при снятии защиты у меня автоматически активируется лист, с которого снимается защита.
Вроде бы так происходить не должно. Если код выполнить построчно, то переход не происходит. Может секрет какой есть?

Такая работа выявлена в 2010 и 2013 Excel. На виртуалке с 2003 всё норм.  
Я не волшебник, я только учусь.
 
Думаю, что нет вариантов, кроме как перед снятием защиты запоминать активный лист и потом его активировать принудительно кодом.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Думаю, что нет вариантов, кроме как перед снятием защиты запоминать активный лист и потом его активировать принудительно кодом.
Но он же не должен активироваться вроде бы... Добавил в пример ещё 1 кнопку - снимает защиту с листа 3, меняет число в ячейке А1 и возвращает защиту обратно. Никакого перехода не происходит.
Повторюсь, что при пошаговом исполнении в первом примере лист тоже не меняется.
Я не волшебник, я только учусь.
 
Есть подозрение, что проблема в файле в таком случае. Попробовал записать так:
Код
Sub hh()
    Application.OnTime Now, "'" & ThisWorkbook.Name & "'!hh1"
End Sub

Sub hh1()
'    If ActiveSheet.Name <> sh1.Name Then sh1.Unprotect  'меняет очерёдность. Без этой строчки скачет только с первого листа на второй
    sh2.Unprotect
    sh1.Unprotect
    
    sh1.Protect
    sh2.Protect
End Sub
Макрос hh1 не найден. Но он есть. При попытке выполнить макрос hh1 через Alt+F8 ничего не происходит. Это очень странно. Попробуйте создать файл с нуля и повторить проблему.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Попробуйте создать файл с нуля и повторить проблему.
Попробовал (не смотря на то, что специально этот пример готовил) .Повторил  :D.
Похоже это из-за кнопки такой баг. В кнопке ActiveX всё работает, в элементе формы - нет. Такую кривую кнопку поставил из-за совместимости с 2003.

Application.OnTime вроде бы спасает. а в чём прикол?
Я не волшебник, я только учусь.
 
Цитата
Wiss написал:
а в чём прикол?
Прикол в том, что OnTime заставляет Excel сначала завершить все свои задачи в книге и только после этого вызывать процедуру. При снятии защиты Excel все равно активирует лист для изменения свойства защиты. В Вашем случае именно нажатие кнопки мешало нормальному ходу выполнения этого, т.к. нажатие и отрисовка кнопки выполнялись параллельно с выполнением кода, что вероятно и сбивало Excel с толку и он не успевал сделать правильный переход обратно на лист запуска после снятия защиты.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, СПАСИБО! Буду использовать. Я же знал, что какой-то секрет есть, причём универсальный и важный :D  
Изменено: Wiss - 17.07.2018 12:54:50
Я не волшебник, я только учусь.
Страницы: 1
Наверх