¿Cómo puedo forzar la ejecución de las macros?

Para Elsa. Continuando con el tema de las medidas de seguridad que se puedan tomar, algo muy útil sería poder forzar a que un equipo ejecute las macros de mi archivo, para que se abra con las características que tiene sin tener acceso a las planillas (que en mi caso representan la base de datos).

1 Respuesta

Respuesta
2

Ya tratamos el tema de las protecciones (libro, hojas y Editor).

- Proteger libro: se necesita clave para abrir el libro

- Proteger hojas: evita que vean/modifiquen fórmulas y evita que puedan copiarlas y pegarlas en otro libro

- Proteger editor: evita que se vea el código.

Ahora, si abren el libro con la clave ... pero 'sin habilitar las macros' podrán mirar el contenido de las hojas aunque no podrán ejecutar ninguna opción de macro. Ni tampoco podrán copiarlas ya que, como mencioné en post anterior, protegiéndolas sin opción de seleccionar las celdas bloqueadas no es posible hacer una selección de la hoja para copiarla.

Entonces vamos a tratar de que tampoco miren las hojas... es decir que vamos a forzar a que habiliten las macros.

Para ello, seguimos estos pasos

1- Tener una hoja en blanco (opcional: con un pequeño cartel instruyendo de
cómo se habilitan las macros). La llamaremos por ejemplo HojaVacia.

2- Agregamos un código en el evento BeforeClose para que se oculten todas las hojas de modo de no verlas ni siquiera desde el menú Formato, Mostrar-Ocultar hojas.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'se ocultan todas las hojas a excepción de la vacía
For Each Sh In Sheets
If Sh.Name <> "HojaVacia" Then Sh.Visible = xlVeryHidden
Next
End Sub

3- Este código también debieras colocarlo en el evento BeforeSave (Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Para que al guardar el libro se vuelvan a ocultar las hojas y así el libro copia siga con las mismas restricciones que el original.

4- En el evento Open se muestran las hojas. 

Private Sub Workbook_Open()
For Each Sh In Sheets
    Sh.Visible = True
Next
End Sub

5 - Si tus macros tienen instrucciones del tipo Save, SaveAs, SaveCopyAs entonces tenés que evitar que se ejecute el evento BeforeSave ... y para eso se coloca antes de la instrucción Save esta línea evitando que se ejecute ese evento:

Application.EnableEvents = False

Y la misma en True luego de cualquier instrucción Save.

Te recuerdo que la consulta sigue abierta en espera de que la valores (Excelente o buena) para darla por cerrada.

Si necesitas un pequeño ejemplo de cómo se verá o cómo se trabaja con estas restricciones podés solicitamelo a los correos que aparecen en mi sitio que dejo al pie.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas