¡ Hola Fejoal !

¿Cómo puedo hacer para que al abrir un archivo de Excel (que contiene macros) se activen automáticamente sin necesidad de interactuar con el cuadro de habilitar o deshabilitar macros? Gracias

1 Respuesta

Respuesta
1
Esta es una pregunta perdedora. Porque no tengo una respuesta que solucione el control de macros inicial que ejecuta MS Excel.
En realidad, eso está vedado a nosotros, pobres mortales. Y es correcto que así sea. Recuerda que la posibilidad de anular la ejecución de macros existe para que programas con macrovirus accedan a tu PC sin que siquiera te enteres. Si fuese posible esto sería lo primero que incluirían en el código maligno para evitarlo.
(Seguramente, debe haber métodos "extra-Excel" que lo hagan)
Lo que suelo sugerir en estos casos es compensar esa limitación con un diseño inteligente de tu archivo.
Agrega una hoja ("NOTA", por ejemplo) a modo de caratula que indique que para acceder a las hojas de ese archivo es necesario habilitar macros al inicio. Luego oculta el resto de las hojas y protege el libro con una clave compleja.
Así, en caso de que no habilite macros, se encontrará con una sólo hoja disponible, avisándole que, para que funcione debe habilitar macros. Como el libro cuenta con una protección, no le será posible ver el resto de las hojas ocultas, a menos que conozca la clave de libro.
Si, en cambio, las macros están habilitadas, una asociada al evento de apertura, mostrará el resto de las hojas y ocultará la caratula.
En el panel de macros de ThisWorkbook pega esto:
Private Sub Workbook_Open()
MuestraTo
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'salida
Call Salida
ActiveWorkbook.Saved = True
Cancel = True
End Sub
---
Y en un módulo nuevo pega estas macros:
---
Private Sub OcultaTo()
ActiveWorkbook.Unprotect "PIRULO"
For Each SHT In Sheets
If SHT.Name <> "NOTA" And SHT.Visible Then SHT.Visible = xlVeryHidden
Next SHT
ActiveWorkbook.Protect "PIRULO"
End Sub
Private Sub MuestraTo()
ActiveWorkbook.Unprotect "PIRULO"
For Each SHT In Sheets
If SHT.Name <> "NOTA" Then SHT.Visible = True
Next SHT
Sheets("NOTA").visible = xlVeryHidden
End Sub
Private Sub Salida()
Application.ScreenUpdating = False
Sheets("NOTA").Visible = True
Sheets("NOTA").Select
OcultaTo
Application.DisplayAlerts = True
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
MuestraTo
End Sub
Esta macro, es llamada (call Salida) por el Evento Before_save. Es decir que cuando el operador decide grabar, el proceso es interceptado por tal evento y oculta todas (con OcultaTo)las hojas menos la primera (NOTA), protegerá el libro y lo grabará. Al finalizar el grabado, muestra todas las hojas (con MuestraTo) nuevamente para poder seguir trabajando.
De esta manera, el archivo que está en el disco siempre estará protegido con una password y con sólo una hoja visible (NOTA).
Aquí incorporaste lo siguiente:
- Dos macros auxiliares para ocultar y mostrar todas las hojas (excepto NOTA)
- Una macro auxiliar que se activa con el evento Before_Save, es decir antes de grabar.
Esta macro toma el control del proceso de grabación. Si la clave hubiese sido la que definiste en "Lector" no grabará el archivo, notificándolo de esto.
En los otros casos, ocultará todas las hojas menos la primera, protegerá el libro y lo grabará. Luego muestra todas las hojas nuevamente para poder seguir trabajando. De esta manera, nos aseguramos que la versión guardada siempre tenga todas las hojas ocultas.
Notarás que utilizo una contraseña en este libro: la de Libro que está incluida en el mismo código de la macro.
Por tal razón, es conveniente que todo el proyecto de VBA estuviese también protegido para que el usuario no pueda leer el código y, eventualmente, descubrir cual es la contraseña.
Para activar la protección de módulos, accede al Editor de Visual Basic, en su Navegador de Proyectos, ¿busca el de tu archivo? Cierra todos los elementos que tenga asociado- haz click derecho sobre él. ¿Elige? ¿Propiedades del VBA Project?. Selecciona la solapa de Protección, ¿marca la casilla de? ¿Bloquear proyecto para visualización? Y también ingresa otra contraseña aquí.
Espero que esto te sirva. Pero pregunta de nuevo si no quedó claro.
Insisto, esto intenta dar una solución a un problema que genera la rigidez de MS Excel en el control de virus en macros.
De allí la extensión y complejidad de esta respuesta. Ojala te sirva.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas