Tengo una hoja de cálculo de Excel configurada como reloj. El empleado abre su archivo de reloj de la semana y completa la fecha de finalización de la semana en el lugar designado. De ahora en adelante, sólo se utiliza el ratón para realizar entradas. El empleado selecciona el celular adecuado para el día de la semana y la acción de marcar, ir a almorzar, regresar de almorzar y regresar a casa. Después de colocar el cursor sobre la celda correcta, hacen clic en un botón (un botón vinculado a una macro) que completa el tiempo correcto para la acción. No sé cómo evitar que simplemente vayan al celular que quieran y escriban el tiempo que quieran. Intenté agregar proteger el celular con una contraseña como parte de la macro del botón, pero no pude hacerlo funcionar. ¿Alguien tiene alguna manera de proteger las celdas para que el empleado no pueda alterar los tiempos? ¿O existe simplemente una manera más fácil de hacer esto todos juntos?
Respuesta1
Sus usuarios tienen acceso para escribir en el archivo Excel...
No creo que técnicamente puedas hacer cumplir esto dentro de Excel; Creo que quieres un software alternativo. Sin embargo, admiro tu habilidad con las macros de Excel.
Elaborar:
- Si el usuario puede modificar la celda, entonces no está protegido contra el hecho de que el usuario simplemente modifique la celda por su cuenta (escribiendo un valor).
- Si el usuario no puede modificar la celda, entonces está protegida contra el simple hecho de escribir un valor, pero tampoco puede hacer que se escriba en ella la información correcta desde una macro.
Esto es distinto del cifrado de celdas, que impide incluso la lectura sin la contraseña.
Creo que existe una gran cantidad de software de tarjetas de tiempo y la mayoría probablemente pueda exportar los datos recopilados a Excel. Ampliaría mis horizontes más allá de las hojas de cálculo si estuviera en tu posición.
Respuesta2
Puede no permitir cambios en las celdas mediante un controlador de eventos de 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
No sé si establecer el valor de las celdas mediante una macro de VBA hace que se active este evento. Sé que no se activa por cambios inducidos por fórmulas. Pero puede definir fácilmente una variable global para permitir que se establezcan cambios antes de cambiar la celda y desarmarla después.
También puede intentar capturar el Worksheet_SelectionChange
evento para evitar que el usuario coloque el cursor dentro de la celda. Para las celdas no permitidas, puede reposicionar el cursor en alguna celda predefinida (como A1), o escribir algún código más complicado para recordar la última posición permitida del cursor y reposicionarla.