Включение защиты от изменений ячеек если ячейка в последнем столбце равна 100%

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
bietins
Сообщения: 4
Зарегистрирован: 19 ноя 2010, 16:12

Нужна помощь!

В файле общего доступа (строка: A2:A500 - названия операций, название колонок B2:AF2 - даты месяца от 01.10.10 до 31.10.10, AG2:AG500 - % завершения операции) группа людей вносят данные (отработанные человеко-часы) через вызванную двойным щелчком по ячейке форму, в которой заодно и отмечают % завершения от планируемого. Эти данные (ч/ч автоматом прописываются в выделенную ячейку, % автоматом прописывается в ячейку колонки AG) записываются с нажатием кнопки "ВНЕСТИ ИЗМЕНЕНИЯ". Задача: необходим макрос, который после нажатия этой кнопки проверит %, и если значение =100%, то заблокирует от изменения ячейки от B до AG именно этой строки.
Terminators
Сообщения: 14
Зарегистрирован: 23 сен 2010, 11:13

bietins
Сервис - Макрос - Начать запись.
Сервис - Защита - Защитить лист - выберите нужные пункты - окей.
Сервис - Макрос - Остановить запись.
Сервис - Макрос - Редактор Visual Basic.
Ищем Module1 в книге, в которой записывали макрос.

Код: Выделить всё

Sub Макрос1()
If FormatPercent(Range("A1").Value, 0) = FormatPercent("100%", 0) Then
    MsgBox "В ячейке 100%"
End If
End Sub
bietins
Сообщения: 4
Зарегистрирован: 19 ноя 2010, 16:12

Terminators писал(а):bietins
Сервис - Макрос - Начать запись.
Сервис - Защита - Защитить лист - выберите нужные пункты - окей.
Сервис - Макрос - Остановить запись.
Сервис - Макрос - Редактор Visual Basic.
Ищем Module1 в книге, в которой записывали макрос.

Код: Выделить всё

Sub Макрос1()
If FormatPercent(Range("A1").Value, 0) = FormatPercent("100%", 0) Then
    MsgBox "В ячейке 100%"
End If
End Sub

Не то
Во-первых - в книге с общим доступом лист не защитишь и этот макрос не работает, во-вторых - после запуска этого макроса защищается весь лист (если он конечно без общего доступа) даже если ни в какой ячейке нет100% (не появляется только MsgBox).

Может быть кто-то подскажет: может быть при открытии файла поставить автофильтр, который скроет строки если там стоит 100% и каким-то образом запретить снимать фильтр??? Вот только как?
Помогите, кто чем может :) !!!
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

макрос, который после нажатия этой кнопки проверит %, и если значение =100%,
то просто - выход с сообщением о невозможности продолжения.

Код: Выделить всё

Sub tt()
iRow = ActiveCell.Row'вычисляем строку в которой будут вводиться данные
iProc = Range("AG" & iRow)'проверяем значение ячейки с процентами (100% =1)
    If iProc = 1 Then
    Call MsgBox("100%" _
                & vbCrLf & "Ввод запрещен!" _
                , vbExclamation, "100%")
    
    Exit Sub
    End If
End Sub
Вставьте этот код в обработчик нажатия кнопки
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
bietins
Сообщения: 4
Зарегистрирован: 19 ноя 2010, 16:12

VictorM писал(а):то просто - выход с сообщением о невозможности продолжения.

Код: Выделить всё

Sub tt()
iRow = ActiveCell.Row'вычисляем строку в которой будут вводиться данные
iProc = Range("AG" & iRow)'проверяем значение ячейки с процентами (100% =1)
    If iProc = 1 Then
    Call MsgBox("100%" _
                & vbCrLf & "Ввод запрещен!" _
                , vbExclamation, "100%")
    
    Exit Sub
    End If
End Sub
Вставьте этот код в обработчик нажатия кнопки
VictorM
Отличное решение, вот только эти % можно изменить в самом столбце "%", а потом вводи ч/ч снова сколько хочешь.
Придется прописывать эти % в каком-то очень далеком столбце и просто-напросто скрыть его.
Может быть есть способ защитить ячейку с % в книге с общим доступом после внесения 100%?
bietins
Сообщения: 4
Зарегистрирован: 19 ноя 2010, 16:12

VictorM писал(а):то просто - выход с сообщением о невозможности продолжения.

Код: Выделить всё

Sub tt()
iRow = ActiveCell.Row'вычисляем строку в которой будут вводиться данные
iProc = Range("AG" & iRow)'проверяем значение ячейки с процентами (100% =1)
    If iProc = 1 Then
    Call MsgBox("100%" _
                & vbCrLf & "Ввод запрещен!" _
                , vbExclamation, "100%")
    
    Exit Sub
    End If
End Sub
Вставьте этот код в обработчик нажатия кнопки

Спасибо, все работает отлично! с меня пиво :D
Ответить