Ejecución de una macro después de la impresión (Microsoft Excel)
Franklin tiene una macro que oculta algunas filas en una hoja de trabajo y luego imprime la hoja de trabajo. Para hacer esto, usa el controlador de eventos BeforePrint. El problema es que Franklin quiere mostrar las filas automáticamente después de que se completa la impresión. No sabe cómo hacer esto dentro de su macro.
Hay algunas formas de abordar esto. Una es usar el controlador de eventos BeforePrint y usarlo para ocultar las filas que desea y luego especificar una macro para ejecutar a través del método OnTime. Así es como se vería el controlador de eventos:
Private Sub Workbook_BeforePrint(Cancel As Boolean) ' Code here to hide rows desired Application.OnTime Now, "AfterPrint" End Sub
Deberá agregar a este controlador de eventos el código para ocultar las filas que desea ocultar. (Franklin dijo que tenía ese código funcionando; estaba mostrando problemas después de la impresión). Tenga en cuenta que la macro que se llama a través de OnTime es una llamada AfterPrint. Esta macro debe colocarse dentro de un módulo normal, no en el mismo módulo en el que se colocan los controladores de eventos. Puede ser incluso más simple que el controlador de eventos:
Sub AfterPrint() ' Code here to unhide rows Cells.Select Selection.EntireRow.Hidden = False End Sub
También puede, si lo desea, omitir la necesidad del método OnTime (y la macro AfterPrint) por completo. Esto implicaría este enfoque:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
La macro funciona porque cancela la impresión que desencadenó el evento BeforePrint, oculta las filas, imprime la hoja de trabajo activa y luego muestra las filas.
El inconveniente de cualquier enfoque basado en el controlador de eventos es que limita lo que el usuario puede imprimir. En otras palabras, el usuario solo puede imprimir lo que usted le permite imprimir, no lo que realmente quiera imprimir. Para sortear esta limitación bastante grande, deberá abandonar por completo el enfoque de BeforePrint. En su lugar, cree una macro regular que maneje la impresión:
Sub PrintWS() ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
Observará que esto es, esencialmente, la esencia del segundo enfoque de BeforePrint: oculta las filas, imprime la hoja de trabajo y luego muestra las filas. Esta macro PrintWS podría vincularse a una tecla de acceso directo o algo en la barra de herramientas de acceso rápido para que se pueda llamar fácilmente.
Por cierto, si decide optar por uno de los enfoques de BeforePrint, ha habido informes de que no funciona correctamente en todas las versiones de Excel. (Esto parece muy difícil de localizar). Lo que sucede es que en algunas versiones, lo que Excel imprime está «grabado en piedra» antes de que se invoque el controlador de eventos BeforePrint. Esto significa que cualquier fila que oculte dentro del controlador de eventos se ignora cuando la hoja de trabajo se imprime realmente, por lo que es como si nunca hubiera ocultado las filas en la macro. La única forma de evitar este hecho tan frustrante es manejar la impresión usted mismo, directamente, ya sea a través del segundo ejemplo de BeforePrint anterior o el enfoque de macro PrintWS.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (13624) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.