
У меня есть таблица 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) или написать более сложный код, чтобы запомнить последнюю разрешенную позицию курсора и переместиться в нее.