Hace unos días me llegó una curiosa solicitud, y me pareció interesante publicarla. La cuestión planteada fué:
El asunto parece claro, de qué manera poder controlar que el libro de trabajo de un alumno no pasa de mano en mano, simplemente cambiando el nombre del fichero o cambiando algo del aspecto de formato de la hoja.
Se me ocurrió incluir un evento WorkBook_Open sencillo que verificará el acceso al libro mediante una clave de identidad, y que una vez introducida por primera vez, las posteriores exigiera siempre esta misma, y en caso contrario el libro de trabajo se cerrara.
Para ello he empleado algo recientemente explicado en este blog, la propiedad de las hojas Visible: SheetVeryHidden, que permite ocultar una hoja de cálculo de ojos indiscretos (el de los alumnos).
El primer paso es sencillo, ya que prepararemos la celda A2 de la hoja que he llamado 'DatosCheck', para que reciba y controle el primer y siguientes accesos, que será además la que ocultaremos:
Dentro del Explorador de proyectos del Editor de VBA, buscamos ThisWorkBook e introducimos en él el siguiente código con el evento Open:
Nuestro trabajo de seguridad terminará, una vez oculta (VeryHidden) nuestra hoja 'DatosCheck', protegiendo nuestro proyecto (ver cómo).
El funcionamiento es bien sencillo, al abrir el libro, aparecerá un cuadro que pedirá tu número de indetidad personal, la primera vez que se abra admitirá cualquier valor, que automáticamente quedará registrado en una hoja oculta, y el alumno podrá seguir trabajando sin problemas sobre el ejercicio propuesto.
En posteriores accesos al libro, se solicitará igualemente el número de indentidad, sólo se permitirá trabajar sobre el libro si el código introducido corresponde con el primero grabado, en caso contrario el libro se cerrará.
...como puedo hacer para dotarle a los archivos excel de un codigo invariable que me permita relacionar un archivo especifico con un alumno especifico. El problema que quiero subsanar es que los alumnos se pasan los archivos le cambian el nombre y entregan... |
El asunto parece claro, de qué manera poder controlar que el libro de trabajo de un alumno no pasa de mano en mano, simplemente cambiando el nombre del fichero o cambiando algo del aspecto de formato de la hoja.
Se me ocurrió incluir un evento WorkBook_Open sencillo que verificará el acceso al libro mediante una clave de identidad, y que una vez introducida por primera vez, las posteriores exigiera siempre esta misma, y en caso contrario el libro de trabajo se cerrara.
Para ello he empleado algo recientemente explicado en este blog, la propiedad de las hojas Visible: SheetVeryHidden, que permite ocultar una hoja de cálculo de ojos indiscretos (el de los alumnos).
El primer paso es sencillo, ya que prepararemos la celda A2 de la hoja que he llamado 'DatosCheck', para que reciba y controle el primer y siguientes accesos, que será además la que ocultaremos:
Dentro del Explorador de proyectos del Editor de VBA, buscamos ThisWorkBook e introducimos en él el siguiente código con el evento Open:
Private Sub Workbook_Open() Dim identificacion As String 'forzamos la realización de una pregunta de verificación identificacion = InputBox("Identificación", "Núm identidad") 'comprobamos que la celda A2 elegida está vacía 'lo que significaría que es la primera vez que se accede al libro If Sheets("DatosCheck").Range("A2").Value = vbEmpty Then 'si está vacía, entonces la rellenamos con el código introducido 'y salimos del procedimiento Sheets("DatosCheck").Range("A2").Value = identificacion Exit Sub Else 'en caso contrario, verificamos que el código es el mismo introducido 'la primera vez, si fuera diferente, cerramos el libro sin guardar cambios. If Sheets("DatosCheck").Range("A2").Value <> identificacion Then MsgBox "No corresponde!!!" ActiveWorkbook.Close SaveChanges:=False End If End If End Sub
Nuestro trabajo de seguridad terminará, una vez oculta (VeryHidden) nuestra hoja 'DatosCheck', protegiendo nuestro proyecto (ver cómo).
El funcionamiento es bien sencillo, al abrir el libro, aparecerá un cuadro que pedirá tu número de indetidad personal, la primera vez que se abra admitirá cualquier valor, que automáticamente quedará registrado en una hoja oculta, y el alumno podrá seguir trabajando sin problemas sobre el ejercicio propuesto.
En posteriores accesos al libro, se solicitará igualemente el número de indentidad, sólo se permitirá trabajar sobre el libro si el código introducido corresponde con el primero grabado, en caso contrario el libro se cerrará.
Ismael
ResponderEliminarHe seguido el procedimiento para controlar el acceso, pero me aparece un error de "Subíndice fuera del intervalo"
El ("DatosCheck") y ("A2") de la línea 7 y 10 no me aparecen en tono azul.
Disculpa...ya corregi mi error...gracias
ResponderEliminarOk,
Eliminarperfecto
Slds cordiales
Excelente idea, de hecho hay que realizar este tipo de tareas sobre todo para aquellos estudiantes que piensan solo en copiar y pegar.
EliminarMe pregunto si puedes ayudarnos agregando lo siguiente, que tenga una clave de acceso, que es la del Profesor, pues, para no estar buscando en una lista el código del estudiante, y digitarlo uno a uno, que tenga la opción de introducir inicialmente la clave del profe (este código va "oculto" en el código de macro), y así poder tener acceso al archivo correspondiente.
Gracias por tus aportes.
Armand
Hola Armand,
Eliminarde hecho por ese motivo nació el ejemplo expuesto.
Para el desarrollo que me propones mejor envíame un correo a
excelforo@gmail.com
Slds cordiales
Buenas Noches. ¿Existe alguna forma en la que pueda controlar el nro de veces que se ingresa a un libro o proyecto de Excel. Es decir, que sólo se pueda ingresar por ejemplo 10 veces?
ResponderEliminarHola Alexander,
Eliminarnos podríamos apoyar en una hoja oculta, donde ir llevando un contador físico en una celda concreta... cada vez que se entre en el fichero (con las macros activas!!) se incremente el valor de la celda en +1...
de tal forma que si la celda es >10 no permita abrir el fichero.
Todo se controlaría desde un evento _Open dentro de ThisWorbook...
Espero haberte dado la idea (en esencia es bastante similar al ejemplo propuesto).
Saludos