Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2014, 21:35   #1
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию Установка защиты на ячейку.

Помогите создать макрос, который при открытии файла проверяет на "лист1" в столбце С массив "Дата_10" на условие ячейки на защиту, если она не защищена, то проверяет ее на дату меньшую за дату Сегодня, если меньше, то ставил защиту данной ячейки и в соседней в столбце D. Так просмотреть весь массив "Дата_10".

Последний раз редактировалось Pasha_Z; 08.01.2014 в 21:53.
Pasha_Z вне форума Ответить с цитированием
Старый 08.01.2014, 21:50   #2
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

А на русском?
kalbasiatka вне форума Ответить с цитированием
Старый 08.01.2014, 21:58   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а пока формулируется вопрос...
Pasha_Z, должен Вас огорчить - защита устанавливается на лист, Вы можете вибрать какие ячейки будут защищены, а каие нет, но защита на лист с массой ограничений на действия пользователя на этом листе, часто без разницы защищена ячейка или нет.

Подумайте еще нужен ли Вам этот гемморой с защищенным листом и кучей проблем связанных с невозможностью выполнить многие стандартные манипуляции с данными.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.01.2014, 22:27   #4
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

в том-то и дело.
лист у меня защищен,
но есть диапазон в который вводятся данные
столбцы С, D, E, F
в столбце D - значения даты. (определенные под названием массива "Дата_01")
через некоторое время при открытии файла надо проверить значения массива "Дата_01" столбца D
и если ячейка из массива не защищена и меньше текущей даты - то на ее поставить условие защиты и также поставить защиту на ячейку столбца Е данной строки.
и так далее проверять весь названный массив.

перед проверкой ячейки снимается защита с листа, а после проверки массива опять ставится защита листа.
Pasha_Z вне форума Ответить с цитированием
Старый 09.01.2014, 06:45   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
...если ячейка из массива не защищена и меньше текущей даты - то на ее поставить условие защиты...
Если значение в ячейке из указанного диапазона меньше текущей даты, то выполнение этого условия достаточно для того, чтобы принять решение сделать ячейку защищаемой. Проверять, защищена эта ячейка исходно или нет - это лишнее.
Для решения данной задачи в модуль книги поместите код:
Код:
Private Sub Workbook_Open()
    Dim x As Range, cell As Range
    For Each cell In Range("Дата_01")
        If cell < Date Then If x Is Nothing Then Set x = cell Else Set x = Union(x, cell)
    Next
    If Not x Is Nothing Then
        Sheets(1).Unprotect
        Intersect(x.EntireRow, [D:E]).Locked = True
        Sheets(1).Protect
    End If
End Sub
Если нужно, можно предварительно проверить, существует ли на 1-ом листе диапазон с именем "Дата_01". Также, можно снимать и устанавливать защиту листа используя пароль. И еще: не совсем понятно, что значит
Цитата:
через некоторое время при открытии файла надо проверить...
Предлагаемый вариант будет проверять ячейки диапазона при каждом открытии файла.

P.S. Сделал, согласно требованиям из поста №4. В 1-м посте имя диапазона и столбцы ячеек, требующих установки защиты были другими!
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 09.01.2014 в 07:05. Причина: Добавлено пояснение.
SAS888 вне форума Ответить с цитированием
Старый 09.01.2014, 13:19   #6
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

Для решения данной задачи в модуль книги поместите код:
Код:
Private Sub Workbook_Open()
    Dim x As Range, cell As Range
    For Each cell In Range("Дата_01")
        If cell < Date Then If x Is Nothing Then Set x = cell Else Set x = Union(x, cell)
    Next
    If Not x Is Nothing Then
        Sheets(1).Unprotect
        Intersect(x.EntireRow, [D:E]).Locked = True
        Sheets(1).Protect
    End If
End Sub
Если нужно, можно предварительно проверить, существует ли на 1-ом листе диапазон с именем "Дата_01".

С_______ D ______E
0055 31.01.2014 -8821
0066 31.01.2013 0055
____ ________ ____
____ ________ ____
____ ________ ____
0063 01.01.2014 0054
____ ________ ____
____ ________ ____
0066 31.01.2013 0055
...
____ ________ ____
Спасибо за помощь, но немного не так. в Вашем решении также ставится блокировка и на пустые ячейки.
надо при открытии книги проверь ячейки данного массива Дата_01, если дата ячейки массива меньше даты открытия файла то поставить защиту ячеек строки где проверяется ячейка столбцов D и Е, если нет, то ячейки не блокировать.

Последний раз редактировалось Pasha_Z; 09.01.2014 в 14:27.
Pasha_Z вне форума Ответить с цитированием
Старый 09.01.2014, 13:39   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Спасибо за помощь, но немного не так.
"не так" будет продолжаться, пока файл не приложите...
и пока одно сообщение не будет противоречить другому:
в одном сообщении:
Цитата:
в столбце D - значения даты. (определенные под названием массива "Дата_01")
а в другом:
Цитата:
Если нужно, можно предварительно проверить, существует ли на 1-ом листе диапазон с именем "Дата_01"
допустим, проверили, не существует. что дальше делать?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.01.2014, 14:14   #8
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
"не так" будет продолжаться, пока файл не приложите...
и пока одно сообщение не будет противоречить другому:
в одном сообщении:

а в другом:

допустим, проверили, не существует. что дальше делать?
надо написать проверку массива в столбце D под названием Дата_01.
открыли книгу, проверили массив, если нету значений удовлетворяющих условию, ничего макрос не делает, ввели данные в пустые пустые ячейки и при последующем открытии книги - опять проверка и выполнение макроса.
я с массивами не силен.

При выполнении макроса и на пустые ячейки в массиве ставится блокировка.
мне в пустые ячейки надо вводить значение снова при открытии книги.

Последний раз редактировалось Pasha_Z; 09.01.2014 в 14:28.
Pasha_Z вне форума Ответить с цитированием
Старый 09.01.2014, 14:26   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
я с массивами не силен.
это не беда. не умение программировать не относится к смертным грехам ни в одной из регилий

а SAS888, по-Вашему, что написал?
такое впечатление, что он прочитал это
Цитата:
надо написать проверку массива в столбце D под названием Дата_01.
открыли книгу, проверили массив, если нету значений удовлетворяющих условию, ничего макрос не делает
перед тем, как писать макрос.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.01.2014, 14:42   #10
Pasha_Z
Пользователь
 
Регистрация: 01.01.2014
Сообщений: 71
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это не беда. не умение программировать не относится к смертным грехам ни в одной из регилий

а SAS888, по-Вашему, что написал?
такое впечатление, что он прочитал это
перед тем, как писать макрос.
а SAS888, может не понял, что пустые ячейки ненадо блокировать.
а так макрос его выполняется, дата с меньшей датой - ячейки блокируются, с датой больше - не блокируются.

мне также надо чтобы ячейки пусты не блокировались.

p.s.
я добавил в условие проверки и уже не блокируются пустые ячейки не блокируются.
как еще чтобы при блокировке ячейки изменялся цвет шрифта.

Последний раз редактировалось Pasha_Z; 09.01.2014 в 15:32.
Pasha_Z вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка сегодняшней даты в ячейку (для Excel 2007) sergeevaelena Microsoft Office Excel 4 15.03.2012 14:51
Система защиты scherbakovss Безопасность, Шифрование 1 28.12.2009 19:16
Обход защиты Niklan Софт 0 11.11.2009 22:35
(REQ)Установка системы защиты на уровне пользователей Malaec Microsoft Office Access 10 17.06.2009 05:07