Страницы: 1
RSS
Макрос для блокировки ячеек с формулами
 
Добрый день,
Прошу Вашей помощи :oops:

Нужно чтобы в ячейках срабатывали формулы, но мы их не могли редактировать.

Защита ячеек без макроса не подходит, так как чтобы защитить ячейку нужно поставить защиту листа, а при этом мы не можем раскрывать скрытые столбцы, а у меня там есть текст, который периодически нужно будет открывать.
 
На кого рассчитана такая Автоматизация?
 
Я могу только предложить перепрописывать формулы заново при каждом обновлении данных.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Target.Parent.Range("$C$1").FormulaR1C1 = "=IF(OR(R[1]C=""да"",R[2]C=""да"",R[3]C=""да"",R[4]C=""да"",R[5]C=""да"",R[6]C=""да"",R[7]C=""да"",R[8]C=""да"",R[9]C=""да"",R[10]C=""да""),""да"",""нет"")"
    Target.Parent.Range("$C$13").FormulaR1C1 = "=R[-8]C[4]*R[-7]C[4]"
    Application.EnableEvents = True
End Sub
Изменено: Wiss - 13.12.2018 17:16:55
Я не волшебник, я только учусь.
 
Может, как вариант, макросом на событие Worksheet_SelectionChange рабочего листа исключить возможность выделения ячеек с формулами. А раз нельзя выделить - как в ячейках формулы менять? Многие задумаются... :)
Кому решение нужно - тот пример и рисует.
 
Пытливый, если есть возможность, не могли бы на этом примере показать, пожалуйста?
Изменено: Melancholia - 13.12.2018 22:10:56
 
Wiss, здоровский вариант! А подскажите пожалуйста, нельзя ли как то, например, выбрать диапазон и его заблокировать? Чтобы каждую формулу не писать, просто блокировать ячейку, независимо от того есть ли в ней формула или текст?
А если там на ячейку ещё и макрос срабатывает, то это как-то по-другому делается?
 
В модуль листа 2 вставьте
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C1,c13")) Is Nothing Then
        Target.Offset(0, 1).Select
    End If
End Sub

и попробуйте повыделять красные ячейки.
Кому решение нужно - тот пример и рисует.
 
Пытливый, всё работает, спасибо, но возникло одно но...при выделении всего листа, выходит ошибка, можно как-то избежать этой ошибки? или может существует ещё какая то функция, чтобы обойти эту ошибку, но при этом заблокировать ячейку от редактирования ?
 
Если столбцов Selection больше, чем в UsedRange... Проще - если в Selection столбцов равно количествустолбцов на листе.. Дополнительно такая же проверка по строкам.
 
vikttur, прошу прощение, а как тогда сделать, чтобы не выдавало данной ошибки? или это невозможно?(
 
Цитата
Melancholia написал:
Защита ячеек без макроса не подходит, так как чтобы защитить ячейку нужно поставить защиту листа, а при этом мы не можем раскрывать скрытые столбцы, а у меня там есть текст, который периодически нужно будет открывать
что-то я не понимаю, зачем все это городить? не проще на открытые файла поставить макрос в 1 строчку
Код
Private Sub Workbook_Open()
   Sheets("имя страницы").Protect AllowFormattingColumns:=True, userinterfaceonly:=True
end sub

ну и соответственно защитить все ячейки в которых менять формулу запрещено и снять защиту со всех остальных?

AllowFormattingColumns:=True - позволяет скрывать/показывать столбцы
userinterfaceonly:=True - позволяет менять ячейки макросами, но запрещает руками
может  неверно понимаю ТЗ, но вроде удовлетворяет всем требованиям
Изменено: Melkior - 14.12.2018 09:19:39
Страницы: 1
Наверх