Buenas,
Tengo unos análisis de laboratorio en un libro excel que genero con un macros. Como esos análisis son revisados por muchas personas no quiero que nadie modifique los originales por lo que quiero protegerlos contra escritura con una contraseña aleatoria que coja de una celda del propio libro que se genera. ¿Como podría añadir esa función al macros? No es necesario que yo conozca la contraseña aunque se quede bloqueado contra escritura para siempre.
Gracias a todos por adelantado.
Sería algo así como:
Activesheet.protect "contraseña"
Para generar una contraseña aleatoria, puedes jugar con la función RND y con CHR, sabiendo que los rangos de letras son:
mayúsculas: 65-90
minúsculas: 97-122
Para un código de 8 caracteres, sería algo así:
Dim a As Long
Dim pass As String
Dim upper As Boolean
Dim min As Long
Dim max As Long
pass = ""
For a = 1 To 8
upper = (Rnd > 0.5)
If upper Then
min = 65
max = 90
Else
min = 97
max = 122
End If
pass = pass + Chr(Int((max - min + 1) * Rnd + min))
Next
Cells(1, 1).Value = pass
Lo que hago es escribir la contraseña en la celda A1, pero perfectamente la puedes utilizar como parámetro de protect (eso sí, no podrás desproteger porque nunca sabrás la contraseña) (salvo si buscas por internet "cómo desproteger una hoja de excel", claro)
Un saludo
Muchas gracias, es justo lo que necesitaba :D
Una duda extra ¿hay alguna función en la que solo se proteja con contraseña el guardado del documento? Asi se podria usar el documento de forma normal pero a la hora de guardalo te obilgase a usar un nombre distinto al original, sería el equivalente de hacer de forma manual
Guardar como -> Herramientas -> Contraseña de escritura
Puedes programar en VBA el evento Workbook.BeforeSave
El problema que tiene esto es que si no tienes activadas las macros, el evento no se lanzará y se guardará machacando lo anterior.
Si tienes control sobre las máquinas donde trabajan los usuarios, puedes activar las macros, o puedes instalarles la respuesta a este evento como un complemento.
Un saludo
¡Perfecto! ¡Muchas gracias!