Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 23.01.2021
Сообщений: 6

Запрет редактирования ячейки после определенной даты

23.01.2021, 18:08. Показов 6132. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Есть таблица, в которую пользователи вводят свои данные. Подскажите как запретить вводить данные в отдельные ячейки после наступления определенной даты (например ячейку А1 можно редактировать с 01.01.21 по 10.02.21).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2021, 18:08
Ответы с готовыми решениями:

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

AdvTreeView (TMS) запрет редактирования ячейки
Непонятно как запретить редактирование конкретной ячейки столбца. Мануал очень короткий, полной информации нет. Может кто сталкивался? ...

ValueListEditor запрет редактирования 1й ячейки столбца key?
Подскажите как можно реализовать запрет на редактирование первой ячейки столбца key? (по умолчанию этот столбец не редактируемый, но с...

6
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
25.01.2021, 12:19
здесь макрос нужен.
0
Динохромный
1639 / 776 / 288
Регистрация: 22.12.2015
Сообщений: 2,422
25.01.2021, 17:31
Лучший ответ Сообщение было отмечено Narimanych как решение

Решение

Vnezapno987, когда-то я обсуждал примерно аналогичную задачу, только там была зависимость не от даты, а от пк, и нужно было также прятать столбцы.
Сделать невидимым выбранный столбец для конкретного пользователя
Тут какие нюансы:
1. Если просто запретить редактирование через vba, то пользователь может например запретить выполнение макросов, и внести любое изменение, поэтому в коде реализовано обязательный запрет доступа перед каждым сохранением, что не очень удобно по быстродействию.
2. пароли достаточно легко взламываются специализированным софтом.
3. Дату на пк также можно поставить абсолютно произвольную, и спокойно открывать ваш файл.
4. Работать будет на версии 2010 и выше.

С учетом вышеизложенных оговорок - можно чуть переделать алгоритм под вашу задачу.
Приложите образец таблицы, укажите, какие ячейки не могут редактироваться и где будет прописано, когда какую ячейку редактировать можно/нельзя.
1
0 / 0 / 0
Регистрация: 23.01.2021
Сообщений: 6
26.01.2021, 22:30  [ТС]
Пользователи заполняют ячейки "По месяцам" (С4-N4). Смысл в том чтобы разрешить пользователю заполнять текущий месяц и месяца наперед (то есть, например, в январе можно заполнять все ячейки по декабрь), но при этом запретить редактировать уже прошедшие месяца(то есть в феврале пользователь не может редактировать январь и т.д.). Дату на пк пользователь менять не сможет, так что это не является проблемой, как, в принципе, и защита паролем.
Вложения
Тип файла: xlsx пример.xlsx (10.0 Кб, 30 просмотров)
0
0 / 0 / 0
Регистрация: 27.01.2021
Сообщений: 6
27.01.2021, 23:17
Сделай так

Private Sub Workbook_Open()
Dim nMonth As String
Dim NameMonth As String
Dim n As Byte
Dim a As Variant

nMonth = DatePart("m", Cells(1, 1))
'nMonth = DatePart("m", Now)

NameMonth = MonthName(nMonth)

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Cells.Interior.ColorIndex = 0
Next ws



For n = 1 To 12
If NameMonth = Cells(3, 3) Then
a = Range(Cells(4, n + 2), Cells(7, n + 2)).Address
ActiveSheet.ScrollArea = a
Range(a).Interior.Color = vbGreen
Exit For
ElseIf NameMonth = Cells(3, n + 2) Then
a = Range(Cells(4, n + 1), Cells(7, n + 2)).Address
ActiveSheet.ScrollArea = a
Range(a).Interior.Color = vbGreen
Exit For
End If
Next n

End Sub

Должно работать

Добавлено через 9 минут
Private Sub Workbook_Open()
Dim nMonth As String
Dim NameMonth As String
Dim n As Byte
Dim a As Variant

nMonth = DatePart("m", Cells(1, 1))
'nMonth = DatePart("m", Now)

NameMonth = MonthName(nMonth)

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Cells.Interior.ColorIndex = 0
Next ws



For n = 1 To 12
If NameMonth = Cells(3, n + 2) Then
a = Range(Cells(4, n + 2), Cells(7, 14)).Address
ActiveSheet.ScrollArea = a
Range(a).Interior.Color = vbGreen
Exit For
End If
Next n

End Sub

Не правильно прочитал задачу
Так думаю пойдет
0
Динохромный
1639 / 776 / 288
Регистрация: 22.12.2015
Сообщений: 2,422
28.01.2021, 11:32
Лучший ответ Сообщение было отмечено Vnezapno987 как решение

Решение

Цитата Сообщение от Vnezapno987 Посмотреть сообщение
Смысл в том чтобы разрешить пользователю заполнять текущий месяц и месяца наперед (то есть, например, в январе можно заполнять все ячейки по декабрь)
Vnezapno987, прикладываю вариант файла с оговорками:
1. Таблица должна располагаться на листе "1" с заголовком на том же месте. Если пользователь удалит этот лист и вставит вместо него отредактированную копию листа, то при срабатывании кода будет возникать ошибка, которая будет сигнализировать о несанкционированной замене листа.
2. Закрывается доступ к ячейкам начиная от А4 до последней непустой ячейки ниже (сама графа Название), а также ровно те же строчки по месяцам (то есть последней строчкой таблицы код считает по столбцу "А" - до первой пустой строки)
3. Если при открытии документа пользователь запретит выполнение макросов, то таблица будет полностью залочена, вынуждая пользователя запустить таки макросы.
4. Пароль для ручного снятия защиты с листа - "Frr656JkOp45Zz2" без кавычек.
5. В настоящее время проект VBA не запаролен, любой пользователь может найти пароль на лист по п.4 просто в тексте кода. Пароль на проект VBA ставьте самостоятельно (Alt+f11, контекстное меню по названию проекта в дереве слева, там свойства, в них пароль)
6. Поскольку сейчас январь, в коде указан параметр n (прибавка к текущему месяцу), равный двум, чтобы можно было оттестить работу кода. В нормальном состоянии поставьте n=0
7. Особенно не тестировал, это за вами.
8. Поскольку таблица как я понимаю по факту будет не совсем как в примере, уточняйте и комментируйте, что поменялось.
9. Снять пароли с листа и VBA не великая проблема.
Вложения
Тип файла: zip Вариант 1.zip (17.5 Кб, 58 просмотров)
1
0 / 0 / 0
Регистрация: 23.01.2021
Сообщений: 6
30.01.2021, 19:45  [ТС]
Большое спасибо за помощь, буду пробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2021, 19:45
Помогаю со студенческими работами здесь

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

Получить значение ячейки до и после редактирования?
Есть DataTable, привязанный к dataGridView1. Есть колонка string, в которой храниться дата (17.02.2017). Нужно, чтобы при редактировании...

Очистка DataGridView после окончания редактирования ячейки
Собственно нужно чтоб после редактирования ячейки все содержимое удалялось и заполнялось снова. Rows.Clear() и Columns.Clear() в...

Изменение цвета ячейки Datagridview после ее редактирования
Здравствуйте, Не получается написать событие, которое должно происходить после изменения значения в ячейке Datagridview. Читала про...

Удаление после определенной ячейки
Здравствуйте, ув. форумчане! Есть определенная загвоздка в автоматизации макроса. Задача: Есть 2 колонки с данными, нужно после...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru