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

Вход

Регистрация

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

 

= Мир MS Excel/Некорректная работа макроса защиты ячеек с формулами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Некорректная работа макроса защиты ячеек с формулами
Xpert Дата: Среда, 26.12.2018, 10:38 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем привет и с Наступающим!
Нашёл в Сети макрос, позволяющий организовать защиту только тех ячеек, которые содержат формулы. При этом, добавление/удаление строк и столбцов, например, не блокируется.
Макрос полностью устраивает за исключением одного нюанса: при выделении группы ячеек в любой области листа, для вставки или удаления данных, выскакивает вот такая ошибка,




Реальная таблица намного имеет намного больше строк, и зачастую требуется вставлять наименования и цены копипастом.
Подскажите, пожалуйста, как исправить?

Пример прилагаю.
К сообщению приложен файл: 4608037.xlsm (16.4 Kb)


Сообщение отредактировал Xpert - Среда, 26.12.2018, 10:41
 
Ответить
СообщениеВсем привет и с Наступающим!
Нашёл в Сети макрос, позволяющий организовать защиту только тех ячеек, которые содержат формулы. При этом, добавление/удаление строк и столбцов, например, не блокируется.
Макрос полностью устраивает за исключением одного нюанса: при выделении группы ячеек в любой области листа, для вставки или удаления данных, выскакивает вот такая ошибка,




Реальная таблица намного имеет намного больше строк, и зачастую требуется вставлять наименования и цены копипастом.
Подскажите, пожалуйста, как исправить?

Пример прилагаю.

Автор - Xpert
Дата добавления - 26.12.2018 в 10:38
_Boroda_ Дата: Среда, 26.12.2018, 10:52 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculateManual
    Me.Unprotect Password:="123": Me.EnableOutlining = True
    For Each d_ In Target
        If d_.Locked Then Me.Protect Password:="123", Contents:=True, Scenarios:=True, UserInterfaceOnly:=True, AllowFiltering:=True: GoTo A
    Next d_
A:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]
К сообщению приложен файл: 4608037_1.xlsm (16.7 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculateManual
    Me.Unprotect Password:="123": Me.EnableOutlining = True
    For Each d_ In Target
        If d_.Locked Then Me.Protect Password:="123", Contents:=True, Scenarios:=True, UserInterfaceOnly:=True, AllowFiltering:=True: GoTo A
    Next d_
A:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 26.12.2018 в 10:52
Xpert Дата: Среда, 26.12.2018, 11:44 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Александр, _Boroda_ к сожалению, ошибка та же...


 
Ответить
СообщениеАлександр, _Boroda_ к сожалению, ошибка та же...



Автор - Xpert
Дата добавления - 26.12.2018 в 11:44
_Boroda_ Дата: Среда, 26.12.2018, 12:12 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А, Вы вот про что! Я просто не совсем понял, что Вы делаете для того, чтобы такая ошибка вылезла. Ну да ладно, неважно. Просто напишите перед этой строкой пропуск ошибки
[vba]
Код
On Error Resume Next
[/vba]
К сообщению приложен файл: 4608037_2.xlsm (16.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА, Вы вот про что! Я просто не совсем понял, что Вы делаете для того, чтобы такая ошибка вылезла. Ну да ладно, неважно. Просто напишите перед этой строкой пропуск ошибки
[vba]
Код
On Error Resume Next
[/vba]

Автор - _Boroda_
Дата добавления - 26.12.2018 в 12:12
Xpert Дата: Среда, 26.12.2018, 12:20 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Александр, спасибо!
Как всё просто оказалось!

А ещё вопрос вдогонку: при добавлении или удалении строк макрос не отрабатывает сразу, то есть, до того, как дважды щёлкнешь на любую ячейку - формулы остаются без защиты...это из-за привязки макроса к Worksheet_SelectionChange?
 
Ответить
СообщениеАлександр, спасибо!
Как всё просто оказалось!

А ещё вопрос вдогонку: при добавлении или удалении строк макрос не отрабатывает сразу, то есть, до того, как дважды щёлкнешь на любую ячейку - формулы остаются без защиты...это из-за привязки макроса к Worksheet_SelectionChange?

Автор - Xpert
Дата добавления - 26.12.2018 в 12:20
_Boroda_ Дата: Среда, 26.12.2018, 13:38 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А чем Вам это мешает? Все сделается нормально как только будет выделена любая ячейка


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

Автор - _Boroda_
Дата добавления - 26.12.2018 в 13:38
Xpert Дата: Четверг, 27.12.2018, 08:49 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Напрягает, что в этот короткий промежуток "беззащитности", юзер сумеет удалить или изменить формулы.
 
Ответить
СообщениеНапрягает, что в этот короткий промежуток "беззащитности", юзер сумеет удалить или изменить формулы.

Автор - Xpert
Дата добавления - 27.12.2018 в 08:49
_Boroda_ Дата: Четверг, 27.12.2018, 09:11 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Как? Опишите последовательность действий. Только сами сначала попробуйте


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

Автор - _Boroda_
Дата добавления - 27.12.2018 в 09:11
Alex_ST Дата: Пятница, 28.12.2018, 11:44 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
А может быть проще защищать формулы не защитой листа, а проверкой данных?
Типа такого:[vba]
Код
Sub Formula_Protect_with_CellValidation()
   If ActiveWindow.RangeSelection.SpecialCells(xlCellTypeFormulas) Is Nothing Then Exit Sub
   ActiveWindow.RangeSelection.SpecialCells(xlCellTypeFormulas).Select
   With Selection.Validation
      .Delete
      .Add Type:=xlValidateCustom, Formula1:="="""""
      .ErrorTitle = "В ячейке формула!": .ErrorMessage = "Ввод данных запрещён" & vbCrLf & "Нажмите ""ОТМЕНА"""
      .ShowError = True
   End With
End Sub
[/vba]Я это описывал в топике Макрос "Formula_Protect" (Не мешающие работе методы защиты формул листа)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА может быть проще защищать формулы не защитой листа, а проверкой данных?
Типа такого:[vba]
Код
Sub Formula_Protect_with_CellValidation()
   If ActiveWindow.RangeSelection.SpecialCells(xlCellTypeFormulas) Is Nothing Then Exit Sub
   ActiveWindow.RangeSelection.SpecialCells(xlCellTypeFormulas).Select
   With Selection.Validation
      .Delete
      .Add Type:=xlValidateCustom, Formula1:="="""""
      .ErrorTitle = "В ячейке формула!": .ErrorMessage = "Ввод данных запрещён" & vbCrLf & "Нажмите ""ОТМЕНА"""
      .ShowError = True
   End With
End Sub
[/vba]Я это описывал в топике Макрос "Formula_Protect" (Не мешающие работе методы защиты формул листа)

Автор - Alex_ST
Дата добавления - 28.12.2018 в 11:44
_Boroda_ Дата: Пятница, 28.12.2018, 12:03 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А копи-паст в ячейку с проверкой? И делИт

Добавлено
В теме по ссылке ты как раз про это и пишешь


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

Добавлено
В теме по ссылке ты как раз про это и пишешь

Автор - _Boroda_
Дата добавления - 28.12.2018 в 12:03
Xpert Дата: Пятница, 18.01.2019, 07:18 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Господа!
Столкнулся ещё с одной проблемой в рамках работы данного макроса: не даёт сделать копи-паст в незаблокированные ячейки...

Почему так?
 
Ответить
СообщениеГоспода!
Столкнулся ещё с одной проблемой в рамках работы данного макроса: не даёт сделать копи-паст в незаблокированные ячейки...

Почему так?

Автор - Xpert
Дата добавления - 18.01.2019 в 07:18
_Boroda_ Дата: Пятница, 18.01.2019, 09:05 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Попробуйте убрать строки с Calculation


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

Автор - _Boroda_
Дата добавления - 18.01.2019 в 09:05
Xpert Дата: Пятница, 18.01.2019, 10:15 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Александр, _Boroda_, сработало!
А каким боком вычисления блокировали вставку?
 
Ответить
СообщениеАлександр, _Boroda_, сработало!
А каким боком вычисления блокировали вставку?

Автор - Xpert
Дата добавления - 18.01.2019 в 10:15
Xpert Дата: Пятница, 18.01.2019, 10:15 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Александр, _Boroda_, сработало!
А каким боком вычисления блокировали вставку?
 
Ответить
СообщениеАлександр, _Boroda_, сработало!
А каким боком вычисления блокировали вставку?

Автор - Xpert
Дата добавления - 18.01.2019 в 10:15
_Boroda_ Дата: Пятница, 18.01.2019, 10:21 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Скопируйте ячейку, выполните переход на ручной пересчет (Формулы - Параметры вычислений) и вот тут облом - копирование снимется.


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

Автор - _Boroda_
Дата добавления - 18.01.2019 в 10:21
  • Страница 1 из 1
  • 1
Поиск:

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