Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 11
1

Блокировать листы в Excel после определенной даты

28.11.2017, 13:20. Показов 7988. Ответов 5

Author24 — интернет-сервис помощи студентам
Добрый день,
Искала на просторах интернета решения по данному вопросу, но к сожалению конкретного работающего решения найти не смогла.
У меня в документе excel несколько страниц - каждая страница это отчёт за один календарный день (к примеру, в ячейке F1 каждой страницы я записываю дату, за которую формируется отчёт). Соответственно, в документе Excel у меня примерно 30 листов.
Нужно, чтобы excel блокировал листы для редактирования, дата которых больше одного дня текущего дня. (то есть вчерашний отчёт доступен для редактирования, а позавчерашний - нет).

1. Вариант, который проверяет все листы в книге, но он некорректный на мой взгляд.
Sub Auto_Open()
Dim y As Worksheet
For Each y In ThisWorkbook.Worksheets
y.EnableOutlining = True
If DateSerial(Year(Date), Month(Date), 1) >= DateSerial(Year(wsSh.[F1]), Month(y.[F1]) + 1, 1) Then
If Day(Now()) > 5 Then
y.Protect Password:="8D5r2B1n2", UserInterfaceOnly:=True
End If
End If
Next y

2. Вот более простой вариант на мой взгляд
Private Sub Protect
Dim n as Date, x as Object
n=Range("F1")
If Date()-n>1 then
for each x in Sheets
x.Cells. Locked=True
x.ProtectPassword:="1234"
end if
end sub

Но как в целом, оформить это, запуталась. Подскажите, пожалуйста, где ошибки и как лучше поступить в данной ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2017, 13:20
Ответы с готовыми решениями:

Ограничение фунционала базы после определенной даты
Доброго времени суток! Вопрос в следующем: Есть база данных с формами на локальных компах и...

Запретить открытие документа после определенной даты
Можно ли запретить открытие документа после определенной даты? Можно написать макрос, но макросы...

Копировать одноименные листы из файлов Excel в один файл Excel
nshardarbekov@mail.ru Добрый день, уважаемые! Помогите пожалуйста создать макрос, для того чтобы...

Программа должна работать до определенной даты у пользователя, независимо, что он выставит в настройках даты и времени
Добрый день, уважаемые! Уже сломал голову, но ничего не могу придумать. Дело вот в чем: есть...

5
Заблокирован
28.11.2017, 14:50 2
Цитата Сообщение от KrisTal Посмотреть сообщение
Но как в целом, оформить это
выбрать что-то дельное из обоих вариантов-
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Auto_Open()
Dim n As Date, x As Worksheet
For Each x In Worksheets
  n = x.Range("F1")
  If Date - n > 1 Then
    x.Cells.Locked = True
    x.Protect Password:="1234"
  End If
Next
End Sub
0
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 11
28.11.2017, 17:19  [ТС] 3
А если у меня на листах имеются уже заблокированные ячейки с формулами, то не наступит конфликта?
И эта программа будет правильно блокировать листы при открытии файла? Например, если человек работает с документом на протяжении двух дней...ему нужно будет после 00 часов 00 минут сохранять и закрывать отчёт, и затем снова открывать?
Я скопировала, но странно: Excel позволяет редактировать старый отчёт, но блокирует отчёты за те дни, которые ещё не наступили...
Что я неверно сделала?
Миниатюры
Блокировать листы в Excel после определенной даты  
0
Заблокирован
28.11.2017, 18:27 4
Лучший ответ Сообщение было отмечено KrisTal как решение

Решение

1. Данная процедура д.б. в одном из модулей группы Modules, а не в модуле ЭтаКнига
2. Добавим проверку, что в F1 находится дата
3. Уберем Private на всякий случай
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Auto_Open()
Dim n As Date, x As Worksheet
For Each x In Worksheets
  If IsDate(x.Range("F1")) Then
    n = x.Range("F1")
    If Date - n > 1 Then
      x.Cells.Locked = True
      x.Protect Password:="1234", UserInterfaceOnly:=True
    End If
  End If
Next
End Sub
1
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 11
30.11.2017, 12:17  [ТС] 5
У меня на листе есть заблокированные ячейки с формулами.
То есть я сначала отформатировала ячейки на листе как "незащищаемые", а потом ячейки с формулами сделала защищаемыми и заблокировала.
Поэтому при запуске файла выходит ошибка.
Как сделать так, чтобы он перед блокировкой листа разблокировал эти ячейки, а потом блокировал. Какую команду нужно использовать для этой проверки и разблокировки?

Добавлено через 7 минут
Ошибка: "Нельзя установить свойство Locked класса Range"
0
Заблокирован
30.11.2017, 21:10 6
Лучший ответ Сообщение было отмечено KrisTal как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Auto_Open()
Dim n As Date, x As Worksheet
For Each x In Worksheets
  If IsDate(x.Range("F1")) Then
    n = x.Range("F1")
    If Date - n > 1 Then
      
      x.Unprotect 1234 'не нужна эта строка, если лист защищен с опцией UserInterfaceOnly:=True
      
      x.Cells.Locked = True 'блокируем все ячейки
 
      x.Range("A1,A3,B4:B7").Locked = False 'разблокируем нужные
      
      x.Protect Password:="1234", UserInterfaceOnly:=True
    End If
  End If
Next
End Sub
1
30.11.2017, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2017, 21:10
Помогаю со студенческими работами здесь

Копировать листы из файлов Excel в один файл Excel
Добрый день, господа! Помогите создать макрос, для того чтобы собрать(скопировать) листы из разных...

При выборе даты в календаре - заполнять ячейки по порядку до определенной даты и рядом высвечивать день недели
Здравствуйте. Нужна ваша помощь. В программе есть написанный на VBA календарь. нужно написать код,...

Перенос данных excel -excel на разные листы
Доброго времени суток. Возникла небольшая проблема: Переношу данные из книги в книгу, но в каждой...

Блокировать диапазон ячеек макросом, в зависимости от текущей даты
Доброго времени суток. Есть документ Excel, в нем код на блокировку столбцов, в зависимости от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru