Можно ли использовать макрос для защиты ячейки в таблице Excel паролем?

Можно ли использовать макрос для защиты ячейки в таблице Excel паролем?

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

Связанный контент