* Esta es una publicación de invitado de Ryan Wells, un compañero bloguero y un brillante desarrollador de VBA. *
Si trabaja con Excel, sin duda se le ha pedido que cree resúmenes de su trabajo.
Informes de ventas, facturas, previsiones, horarios, lo que sea.
¿Sabes qué tienen en común todos estos documentos? Se ven muy bien en formato PDF. ¿Sabes qué más? ¡A la gerencia le encantan los archivos PDF!
Convertir Excel a PDF
En este tutorial, le mostraré cómo usar Excel VBA para convertir todo tipo de objetos de Excel a PDF:
Voy a presentar cada una de las macros con algunos comentarios. De esa manera, podrá encontrarlos rápidamente, copiarlos en su editor de VBA y usarlos.
Cuando ejecute cualquiera de estas macros, aparecerá un cuadro de diálogo Guardar como preguntándole dónde desea guardar su PDF. El nombre predeterminado incluye la fecha y la marca de tiempo cuando ejecutó la macro en formato aaaammdd_hhmmss.
Vayamos directo a eso.
Aquí están las macros:
Imprimir selección en PDF
Éste es mi favorito personal. Esta macro convertirá las celdas que ha seleccionado activamente en un PDF.
Si solo tiene una celda seleccionada, la macro de VBA es lo suficientemente inteligente como para darse cuenta de que probablemente no desee convertir solo una celda, por lo que le pide que seleccione el rango que desea convertir:
Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Imprime el rango seleccionado actualmente en un PDF. "Seleccionar un rango", "Obtener rango", Tipo: = 8) De lo contrario Establecer ThisRng = Selection End If 'Solicitar ubicación para guardar strfile = "Selección" & "_" _ & Formato (Ahora (), "aaaammdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Archivos PDF (* .pdf), * .pdf", _ Título: = "Seleccione la carpeta y el nombre del archivo para guardar como PDF") Si myfile "False", entonces 'guarde como PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No se ha seleccionado ningún archivo. No se guardará el PDF", vbOKOnly, "No se ha seleccionado ningún archivo" End If End Sub
Una vez que seleccione el rango y haga clic en Aceptar, se mostrará un cuadro de diálogo donde puede seleccionar dónde desea guardar el PDF.
Automáticamente seleccionará la fecha y la hora del reloj de su sistema y la agregará al nombre del archivo.
Imprimir una tabla en PDF
Muchos usuarios avanzados de Excel almacenan sus datos en tablas organizadas. De hecho, al propio Sumit Bansal le gustan tanto las tablas de Excel que las llama un tesoro escondido en Excel.
Esta macro imprime una tabla de su elección en un PDF. Cuando ejecute la macro, le pedirá el nombre de la tabla que desea guardar.
Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Imprima una tabla de su elección en un archivo PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False' Ingrese a la tabla nombre que desea guardar strTable = InputBox ("¿Cuál es el nombre de la tabla que desea guardar?", "Ingrese el nombre de la tabla") 'Tabla que desea guardar If Trim (strTable) = "" Luego salga de Sub' Solicitud para guardar ubicación strfile = strTable & "_" _ & Format (Now (), "aaaammdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Archivos PDF (* .pdf), * .pdf", _ Título: = "Seleccione la carpeta y el nombre del archivo para guardar como PDF") Si myfile es "False", entonces 'guarde como Rango PDF (strTable) .ExportAsFixedFormat Type : = xlTypePDF, Nombre de archivo: = miarchivo, Calidad: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No se ha seleccionado ningún archivo. No se incluirá el PDF Saved ", vbOKOnly," No File Selected "End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub
Una vez que ingrese el nombre de la tabla y haga clic en Aceptar, se mostrará un cuadro de diálogo donde puede seleccionar dónde desea guardar el PDF.
Automáticamente seleccionará la fecha y la hora del reloj de su sistema y la agregará al nombre del archivo.
Imprima todas las tablas para separar archivos PDF
Si su hoja de cálculo tiene varias tablas y necesita guardar cada una en un PDF separado, puede ejecutar este código VBA.
Cuando ejecute esta macro, aparecerá un cuadro de diálogo que le pedirá que seleccione la carpeta donde desea guardar sus archivos PDF.
Una vez que elija su carpeta, la macro guardará cada tabla en un PDF con el nombre de la tabla que aparece convenientemente en el título del PDF.
Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Imprima cada tabla en su hoja de cálculo en un PDF diferente Dim strTables () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog (msoFileDialogFolderPicker) .Title = "¿Dónde desea guardar su PDF?" .ButtonName = "Guardar aquí" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then 'si se presiona OK sfolder = .SelectedItems (1) Else End End If End With For Each sht En ThisWorkbook.Worksheets For Each tbl En sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," aaaammdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Siguiente tbl Siguiente sht Fin Sub
Imprima todas las hojas en un PDF
No sé ustedes, pero en mi línea de trabajo, tenemos que conservar copias en PDF de casi todas nuestras hojas de cálculo. Agregamos las copias en PDF de nuestras hojas de cálculo a nuestros cálculos de diseño. Estos archivos PDF solían convertirse en microfichas y guardarse para su retención a largo plazo. Ya sabes, en caso de que ocurriera el apocalipsis.
Si se encuentra en una situación similar, es bueno poder convertir automáticamente todas las hojas de su hoja de cálculo en un PDF. Aquí hay una macro de VBA que hará precisamente eso:
Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Combine todas sus hojas de trabajo en un PDF. a una matriz para cada sh en ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh Si icount = 0 Then 'No se encontraron gráficos. Error de perforación MsgBox "No se puede crear un PDF porque no se encontraron hojas",, "No se encontraron hojas" Salir del final secundario Si 'Solicitar ubicación para guardar strfile = "Hojas" & "_" _ & Formato (Ahora (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" Archivos PDF (* .pdf), * .pdf ", _ Título: = "Seleccione la carpeta y el nombre del archivo para guardar como PDF") Si myfile es "False", entonces 'guarde como PDF ThisWorkbook.Sheets (strSheets) .Seleccione ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No se ha seleccionado ningún archivo. No se guardará el PDF", vbOKOnly, "No se ha seleccionado ningún archivo" End If End Sub
Imprimir hojas de gráficos en PDF
Esta macro convierte todas sus hojas de gráficos en un PDF, ¡pero no sus objetos de gráfico! Por hojas de gráficos, me refiero a los gráficos que tienen su propia pestaña en la lista de pestañas de la hoja de cálculo:
Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Combinar todas las hojas de gráficos en un PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant' Guardar nombres de hojas de gráficos en una matriz para cada canal en ActiveWorkbook.Charts ReDim Preservar strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Next ch If icount = 0 Then 'No se encontraron gráficos. Punch error MsgBox "No se puede crear un PDF porque no se encontraron hojas de gráficos.",, "No se encontraron hojas de gráficos" Salir del sub End If 'Solicitar ubicación para guardar strfile = "Gráficos" & "_" _ & Formato (Ahora () , "aaaammdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Archivos PDF (* .pdf), * .pdf ", _ Título: =" Seleccione la carpeta y el nombre del archivo para guardar como PDF ") Si myfile es" False "Entonces 'guarde como PDF ThisWorkbook.Sheets (strSheets) .Seleccione ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Calidad: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ningún archivo seleccionado. No se guardará el PDF", vbOKOnly, "Ningún archivo seleccionado" End If End Sub
Imprimir objetos de gráfico en PDF
Esta macro guarda todos sus gráficos normales (objetos de gráficos) en un solo PDF. Independientemente de la hoja de trabajo en la que se encuentre su gráfico, se tomará y se guardará en un PDF.
Solo habrá una tabla por página en el PDF final.
Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DESARROLLADOR: Ryan Wells 'DESCRIPCIÓN: Combina todos los objetos del gráfico en un PDF. = False Establecer wsTemp = Sheets.Add tp = 10 Con wsTemp para cada ws en ActiveWorkbook.Worksheets Si ws.Name = wsTemp.Name, luego vaya a los siguientes: Para cada chrt en ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row> 1 Then ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Next nextws: Siguiente ws End With 'Solicitar ubicación para guardar strfile = "Gráficos" & "_" _ & Formato (Ahora (), "aaaammdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Archivos PDF (* .pdf), * .pdf", _ Título: = "Seleccionar carpeta der y nombre de archivo para guardar como PDF ") Si myfile False Entonces 'guardar como PDF wsTemp.ExportAsFixedFormat Tipo: = xlTypePDF, Nombre de archivo: = myfile, Calidad: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = Verdadero 'Else' MsgBox "Ningún archivo seleccionado. PDF no se guardará ", vbOKOnly," Ningún archivo seleccionado "Finalizar si Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True Finalizar con salida Sub End Sub
Si tienes alguna pregunta, déjala en la sección de comentarios, donde Ryan y yo te estaremos esperando.
También le pueden gustar los siguientes tutoriales de Excel:
- Cómo incrustar un archivo PDF en una hoja de cálculo de Excel.
- Bucles de Excel VBA: para el siguiente, hacer mientras, hacer hasta, para cada uno (con ejemplos).
- Cómo grabar una macro en Excel
- Cómo combinar varios libros de trabajo en un solo libro de Excel.
- Cómo ejecutar una macro en Excel.
- Cómo crear y usar un complemento de Excel.
- Manejo de errores de Excel VBA
- Divida cada hoja de Excel en archivos separados
- Cómo importar un archivo XML a Excel »Wiki Ùtil Convertir XML a Excel
Sobre el Autor: Ryan Wells es ingeniero nuclear y desarrollador profesional de VBA. Publica sus tutoriales de Excel VBA fáciles de entender para ayudar a otros a escribir mejores macros. Además de enseñar VBA, Ryan es el desarrollador principal de varios complementos de Excel. Puede encontrar sus tutoriales en WellsR.com.