Macro guardar pdf todas las hojas

Tengo una macro que me guarda la hoja activa en pdf, con una el nombre de varias celdas...

Me gustaría que esta misma macro me valiera para guardar todas las hojas visibles menos "Nueva plantilla".

La macro es la siguiente:

Sub Exportar_Pdf()
'Por.DAM

' Acceso directo: CTRL+m
Dim ruta As String

ruta = Range("O1").Value & " " & "Nº" & " " & Range("A1").Value

With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como"
.AllowMultiSelect = False
.InitialFileName = ruta
.FilterIndex = 25 'como PDF
If .Show Then march = .SelectedItems(1) Else Exit Sub
End With

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Sub

2 Respuestas

Respuesta
2

Revisa el siguiente para generar pdf:

https://youtu.be/j2sf0_ZCr7Y 

Sal u dos Dante Amor

Respuesta
1

Necesitas un bucle del tipo For Each ... Next para recorrer todas las hojas que cumplan las condiciones. En este caso que no sea la 'Nueva Plantilla' y que esté visible.

Sub Exportar_Pdf()
'ajustada x Elsamatilde
Dim sh As Worksheet
Dim march As String
'exporta todas las hojas a excepción de 'Nueva plantilla'
For Each sh In Sheets
    If sh.Name <> "Nueva Plantilla" And sh.Visible = True Then
        sh.Select    'seleccionar la hoja
        'Por.DAM
        ' Acceso directo: CTRL+m
        Dim ruta As String
        ruta = Range("O1").Value & " " & "Nº" & " " & Range("A1").Value
        With Application.FileDialog(msoFileDialogSaveAs)
            .Title = "Guardar archivo como"
            .AllowMultiSelect = False
            .InitialFileName = ruta
            .FilterIndex = 25 'como PDF
            If .Show Then march = .SelectedItems(1) Else GoTo salgo    'seguir con el resto de las hojas
        End With
        'march = ThisWorkbook.Path & "/" & ruta
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End If
salgo:
Next sh
End Sub

Observa que en caso de que no se muestre la ventana de diálogo (en la línea If.Show), reemplacé la instrucción Exit Sub por GoTo salgo. Es decir que en lugar de finalizar el proceso, se pasará a la instrucción Next sh, o sea a la siguiente hoja.

Ahora, como se exporta la hoja activa, debes revisar la instrucción .SelectedItems... si corresponde a cada hoja. Sino aclarame este punto.

* Otro video con ejemplo de bucles en el N° 19 de mi canal ;)


@Elsa Matilde como siempre excelente!

Cabria la posibilidad de que solo me saliera una vez el cuadro de dialogo, para indicarle donde quiero que me guarde este y el resto de PDF's vayan seguidos? 

muchas gracias!

Un saludo

Si, pero en ese caso utilizaremos otro cuadro de diálogo.

Primero aclarar que en la macro original, el valor 25 en la siguiente instrucción no siempre es PDF

 .FilterIndex = 25 'como PDF

Ese índice es el n° de elementos que aparecen en la ventana 'Guardar como', por lo tanto depende de la versión Excel. Observa la lista que te presenta Office 365, el elemento 25 corresponde a xla.

Te reemplazo tu macro original por esta otra que te permite elegir una carpeta, y luego guardar cada hoja con nombre = valores de las celdas indicadas de cada hoja.

Sub Exportar_Pdf()
'x Elsamatilde
Dim carpeta
Dim ruta As String, nbre As String
Dim sh As Worksheet
Set carpeta = Application.FileDialog(msoFileDialogFolderPicker)
'si se cancela la ventana de diálogo, finaliza el proceso
If carpeta.Show = 0 Then Exit Sub
ruta = carpeta.SelectedItems(1)
'exporta todas las hojas a excepción de 'Nueva plantilla'
For Each sh In Sheets
    If sh.Name <> "Nueva Plantilla" And sh.Visible = True Then
        sh.Select    'seleccionar la hoja
        nbre = Range("O1").Value & " " & "Nº" & " " & Range("A1").Value
        ruta = ruta & "\" & nbre
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End If
Next sh
End Sub

Sdos.

Elsa

* Macro adaptada del ejemplo publicado en cap 16.11 del manual 500Macros. No te pierdas la promoción especial de Diciembre!

Buenas!

Al ejecutar la macro me sale un cuadro de dialogo en blanco

Si selecciono el carpeta "macro" y le doy aceptar salta el error:

Se le doy aceptar sin más, salta el mismo error "1004".

Tengo Excel 2016.

Cuando se abre la ventana de diálogo debes seleccionar tu carpeta de destino.

Y en el código, reemplaza todas las líneas a partir del mensaje:

'exporta todas las hojas a excepción de 'Nueva plantilla'
Application.ScreenUpdating = False    'impide ver el movimiento de hojas
On Error Resume Next                  'controla posible error en el nombre u otros
For Each sh In Sheets
    If sh.Name <> "Nueva Plantilla" And sh.Visible = True Then
        sh.Select     'seleccionar la hoja
        nbre = Range("O1").Value & " " & "Nº" & " " & Range("A1").Value
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & "\" & nbre, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End If
Next sh
MsgBox "Fin del proceso.", , "Información"
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas