![Можно ли использовать макрос для защиты ячейки в таблице Excel паролем?](https://rvso.com/image/1576017/%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%20%D0%B4%D0%BB%D1%8F%20%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D1%8B%20%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D0%B8%20%D0%B2%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B5%20Excel%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%BC%3F.png)
У меня есть таблица Excel, настроенная как табель учета рабочего времени. Сотрудник открывает свой файл табель учета рабочего времени на неделю и вводит конечную дату недели в указанное место. С этого момента для ввода данных используется только мышь. Сотрудник выбирает нужную ячейку для дня недели и действия: отметка времени, уход на обед, возвращение с обеда и уход домой. После того, как он помещает курсор на нужную ячейку, он нажимает кнопку (кнопку, связанную с макросом), которая заполняет правильное время для действия. Я не могу понять, как помешать им просто перейти в нужную ячейку и ввести любое время, которое они хотят. Я пробовал добавить защиту ячейки паролем как часть макроса кнопки, но не смог заставить это работать. У кого-нибудь есть способ защитить ячейки, чтобы сотрудник не мог изменить время? Или есть просто более простой способ сделать все это вместе?
решение1
Ваши пользователи имеют доступ к записи в файл Excel...
Я не думаю, что вы можете технически реализовать это в Excel; я думаю, вам нужно альтернативное программное обеспечение. Я восхищаюсь вашим мастерством в работе с макросами Excel.
Подробнее:
- Если пользователь может изменять ячейку, то она не защищена от того, что пользователь может просто изменить ячейку по своему усмотрению (введя значение).
- Если пользователь не может изменить ячейку, то она защищена от простого ввода пользователем значения, но он также не может заставить пользователя записать в нее правильную информацию из макроса.
Это отличается от шифрования ячеек, которое не позволяет даже читать данные без пароля.
Я думаю, что существует множество программ для учета рабочего времени, и большинство из них, вероятно, могут экспортировать собранные данные в Excel. Я бы расширил свои горизонты за пределы электронных таблиц, если бы я был на вашем месте.
решение2
Вы можете запретить внесение изменений в ячейки с помощью обработчика событий VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If If Not Intersect(Target, Range("A1:B10")) Is Nothing Then Application.Undo
End With
Application.EnableEvents = True
End Sub
Я не знаю, вызывает ли это событие установка значения ячеек через макрос VBA. Я знаю, что оно не срабатывает для изменений, вызванных формулами. Но вы можете легко определить глобальную переменную, чтобы разрешить установку изменений до изменения ячейки и отменить ее после этого.
Вы также можете попытаться перехватить Worksheet_SelectionChange
событие, чтобы запретить пользователю размещать курсор внутри ячейки. Вы можете для запрещенных ячеек переместить курсор в какую-то предопределенную ячейку (например, A1) или написать более сложный код, чтобы запомнить последнюю разрешенную позицию курсора и переместиться в нее.