我有一个设置为时间钟的 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),或者编写一些更复杂的代码来记住最后允许的光标位置并重新定位到该位置。