Abrir un libro pero deshabilitar macros (Microsoft Excel)
Bob está procesando información en un libro de trabajo mediante una macro. Le gustaría que la macro abra un segundo libro de trabajo que tenga una macro AutoClose, pero no quiere que se ejecute cuando se cierre el segundo libro de trabajo.
Está buscando una forma de abrir el segundo libro, bajo el control de la macro en el primer libro, sin habilitar las macros en el segundo libro.
No hay forma de deshabilitar las macros en el segundo libro al abrirlo bajo control de macros. (Si lo abre manualmente, obviamente puede mantener presionada la tecla Shift mientras se abre el libro de trabajo, pero eso no ayuda a su macro, ¡no tiene dedos para sostener la tecla sembrada!)
Sin embargo, existen un par de soluciones. El primero implica modificar su código que cierra el segundo libro de trabajo, de esta manera:
Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True
Al establecer la propiedad EnableEvents en False, el evento que va a suceder (cerrar el libro de trabajo) no activará la macro AutoClose.
Puede (y debe) establecer la propiedad EnableEvents en True para que los eventos puedan continuar más tarde.
Otra solución consiste en establecer algún tipo de «indicador» en la macro AutoClose del segundo libro. Este indicador podría probar para ver si el primer libro de trabajo está abierto y, si lo está, no ejecutar el código principal en la macro AutoClose.
Para hacer esto, en el segundo libro de trabajo en la parte superior de las páginas del módulo agregue el siguiente código:
Dim AutoCloseDisabled as Boolean Sub DisableAutoClose() AutoCloseDisabled=True End Sub
Tenga en cuenta que la declaración de declaración para la variable AutoCloseDisabled está fuera de cualquier procedimiento, lo que significa que será de alcance global y accesible dentro de todos los procedimientos.
A continuación, modifique la macro AutoClose para que su cuerpo esté incluido dentro de una instrucción If, como se muestra aquí:
Sub AutoClose() 'variable declarations here If Not AutoCloseDisabled then 'body of AutoClose here End if End Sub
La idea es que cuando el segundo libro se abre normalmente, la variable AutoCloseDisabled se establecerá automáticamente en False. (Las variables booleanas tienen el valor predeterminado False cuando se declaran). Dado que el procedimiento DisableAutoClose nunca se ejecuta en el libro de trabajo, la instrucción If en la macro AutoClose permite que se ejecute el cuerpo real de la macro.
Si abre el segundo libro de trabajo de su primer libro de trabajo, entonces el código de su primer libro de trabajo puede llamar a la macro DisableAutoClose en el segundo libro de trabajo, estableciendo así el indicador AutoCloseDisabled en True. Esto significa que cuando se cierra el segundo libro, la instrucción If omitirá el cuerpo de la macro AutoClose.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (3158) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:
link: / excelribbon-Opening_a_Workbook_but_Disabling_Macros [Abriendo un libro pero deshabilitando macros]
.