seleccion para macro imprimir formulario español codigo excel vba excel-vba printing

para - range excel macro



¿Cómo imprimir más rápido en Excel VBA? (3)

Si desea tener básicamente la misma configuración de página para cada pestaña en un libro de trabajo, ¿puede acelerar las cosas configurando un workshet y luego copiando las configuraciones de esa hoja de trabajo de alguna manera en las otras hojas de trabajo? es posible?

La funcionalidad de impresión de Excel (usando VBA) es extremadamente lenta. Espero que alguien tenga una forma de acelerar la impresión (sin usar el truco Macro de Excel 4). Así es como lo hago ahora:

Application.ScreenUpdating = False With ActiveSheet.PageSetup -various setup statements which I''ve already minimized- End With ActiveSheet.PrintOut Application.ScreenUpdating = True


Al ampliar la pregunta de Michael sobre la publicación y la respuesta de @ rhc, el siguiente código también puede ayudarlo si necesita copiar las personalizaciones del Configurar página de una sola hoja de trabajo a varias hojas de trabajo en un libro de trabajo:

Public Sub CopyPageSetupToAll(ByRef SourceSheet As Worksheet) '' Raise error if invalid source sheet is passed to procedure '' If (SourceSheet Is Nothing) Then Err.Raise _ Number:=vbErrorObjectVariableNotSet, _ Source:="CopyPageSetupToAll", _ Description:="Unable to copy Page Setup settings: " _ & "invalid reference to source sheet." Exit Sub End If SourceSheet.Activate With SourceSheet.PageSetup '' ... '' place PageSetup customizations here '' ... End With SourceSheet.Parent.Worksheets.Select Application.SendKeys "{ENTER}", True Application.Dialogs(xlDialogPageSetup).Show End Sub

De forma alternativa, también puede modificar el procedimiento para crear una hoja de trabajo temporal para alojar los cambios en la configuración de la página, y luego propagar esos cambios a las otras hojas de trabajo en su libro de trabajo:

Public Sub CopyPageSetupToAll(ByRef SourceBook As Workbook) Dim tempSheet As Worksheet '' Raise error if invalid workbook is passed to procedure '' If (SourceBook Is Nothing) Then Err.Raise _ Number:=vbErrorObjectVariableNotSet, _ Source:="CopyPageSetupToAll", _ Description:="Unable to copy Page Setup settings: " _ & "invalid reference to source workbook." Exit Sub End If Set tempSheet = SourceBook.Worksheets.Add tempSheet.Activate With tempSheet.PageSetup '' ... '' place PageSetup customizations here '' ... End With SourceBook.Worksheets.Select Application.SendKeys "{ENTER}", True Application.Dialogs(xlDialogPageSetup).Show tempSheet.Delete Set tempSheet = Nothing End Sub

Debido al uso de la SendKeys() y la funcionalidad Application.Dialogs , este código no ofrece la solución más limpia posible. Sin embargo, hace el trabajo. :)


Sí, las propiedades de PageSetup son muy lentas cuando las configuras.

Ya ha configurado Application.ScreenUpdating = False , lo cual es bueno, pero un paso igual (o más) importante en este caso es establecer Application.Calculation = xlCalculationManual . (Lo mejor es guardar estas configuraciones y restaurarlas al original al final).

Además, la propiedad obtenida para cada propiedad de PageSetup es muy rápida, mientras que solo el conjunto de propiedades es tan lento. Por lo tanto, debe probar la nueva configuración de propiedad para asegurarse de que no sea la misma que el valor de propiedad existente para evitar una llamada innecesaria (y costosa).

Con todo esto en mente, debería poder usar un código que se parece a lo siguiente:

Dim origScreenUpdating As Boolean origScreenUpdating = Application.ScreenUpdating Application.ScreenUpdating = False Dim origCalcMode As xlCalculation origCalcMode = Application.Calculation Application.Calculation = xlCalculationManual With ActiveSheet.PageSetup If .PrintHeadings <> False Then .PrintHeadings = False If .PrintGridlines <> False Then .PrintGridlines = False If .PrintComments <> xlPrintNoComments Then .PrintComments = xlPrintNoComments '' Etc... End With Application.ScreenUpdating = origScreenUpdating Application.Calculation = origCalcMode

Editar: Un par de actualizaciones:

  1. Para Excel 2010 y superior, puede hacer uso de la propiedad ''Application.PrintCommunication'', mientras que para Excel 2007 y abajo, puede hacer uso de ''ExecuteExcel4Macro''. Para obtener más información, consulte Migrar macros de Excel 4 a VBA .

  2. Para Excel 2007 y versiones posteriores, otro truco interesante es asignar temporalmente el controlador de la impresora al ''Escritor de documentos de Microsoft XPS'' y luego volver a configurarlo. La velocidad de impresión puede mejorar en 3x. Ver: Métodos lentos de Excel PageSetup .

Espero que esto ayude...