Guardar hojas a elección como pdf, en un solo archivo

Como siempre cuando necesito una macro requiero a su ayuda! Esta vez quisiera saber si hay una posibilidad de que una macro guarde como PDF las hojas que yo le pida, y en un solo archivo pdf.

Con "las hojas que yo le pida" me refiero a que puede ser a través de un cuadro que salga al momento de ejecutar la macro preguntando los nombres de las hojas. O si simplemente escribo los nombres de las hojas en las celdas A1, A2, A3, A4, y A5 y me tome esos datos.

Desde ya mil gracias! Y saludos!

1 respuesta

Respuesta
1

En el Editor de macros insertá un módulo y allí copiá lo siguiente:

Option Base 1
Sub Hojas_a_Libro()
'x Elsamatilde
'adaptación de macro manual 500Macros, cap.25.6
Dim matrix() As Variant
'total de nombres de hojas desde A1, de hoja activa
y = Range("A" & Rows.Count).End(xlUp).Row
ReDim matrix(y)
'se alimenta la matriz
For i = 1 To y
    matrix(i) = Range("A" & i)
Next i
'se establece ruta y nombre para el PDF
Ruta = ThisWorkbook.Path
miPdf = "hojas.pdf"
'copia el total de hojas de la matriz
Sheets(matrix()).Copy
'se crea un nuevo objeto Libro y se exporta como PDF
Set WB = ActiveWorkbook
'controla posible error de pdf duplicado
On Error Resume Next
With WB
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & miPdf, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=True
    'se cierra el libro creado, sin guardar
    .Close False
End With
'se libera el objeto
Set WB = Nothing
End Sub

En col A debes dejar el nombre de las hojas que serán exportadas como PDF. Debes ajustar el directorio para el PDF y el nombre que le vas a asignar.

La macro se ejecuta desde la hoja donde esté la lista en col A

Hola, la verdad que mil gracias, esta esplendido. Pero te puedo molestar para adaptarlo un poco a mi libro? (lo cual intente solo y no pude).

El rango donde voy a escribir las hojas que quiero guardar como PDF va a estar en realidad en la columna M, pero quisiera ponerle un titulo "Imprimir hojas:" (porque no lo voy a usar yo y con eso la gente entiende un poco mas), el asunto es que con el titulo me da error en:

Sheets(matrix()).Copy

y no sabría que modificar para que comience a tomar los nombres desde M2

Así me quedo la macro funcionando:

Option Base 1
Sub Hojas_a_Libro_PDF()
Dim Resp As Byte
Resp = MsgBox("¿Desea crear el PDF?", vbQuestion + vbYesNo, "EXCELeINFO")
If Resp = vbYes Then
    Dim matrix() As Variant
    y = Range("M" & Rows.Count).End(xlUp).Row
    ReDim matrix(y)
    For i = 1 To y
        matrix(i) = Range("M" & i)
    Next i
    Ruta = ThisWorkbook.Path
    miPdf = "Recorrido.pdf"
    Sheets(matrix()).Copy
    Set WB = ActiveWorkbook
    On Error Resume Next
    With WB
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & miPdf, _
       Quality:=xlQualityStandar, IncludeDocProperties:=False, _
       IgnorePrintAreas:=False, OpenAfterPublish:=True
    End With
    Set WB = Nothing
Else
    MsgBox "Se eligió cancelar...", vbCritical, "EXCELeINFO"
End If
End Sub

Por ultimo quisiera preguntarte algo mas (si es que no es muy difícil) el nombre del archivo va a ser "Recorrido dd-mm-aaaa.pdf" donde esa fecha responde a una formula que tengo cargada en una celda que me da como resultado el día de mañana.

La formula: '=SI(DIASEM(HOY())=6;HOY()+3;HOY()+1)'

Hay posibilidad de agregar eso para que salga automáticamente en el nombre del pdf? 

Mil gracias de nuevo por la respuesta! 

Saludos! 

Lo que comento es para todos los que leen las respuestas:

Sres: Dejen todos los detalles al consultar. Lo más probable es que luego no podrán adaptar el código Uds solos. Enviar las aclaraciones a posteriori es tiempo perdido para Uds y para nosotros. Un tiempo adicional que podríamos utilizar para responder a otros usuarios (u otras consultas de Uds mismos) o para nuestras actividades que también las tenemos.

Bien, adjunto macro modificada en lo que respecta a la matriz.

Sub Hojas_a_Libro_PDF()
Dim Resp As Byte
Resp = MsgBox("¿Desea crear el PDF?", vbQuestion + vbYesNo, "EXCELeINFO")
If Resp = vbYes Then
    Dim matrix() As Variant
    y = Range("M" & Rows.Count).End(xlUp).Row
    ReDim matrix(y - 1)
    For i = 2 To y
        matrix(i - 1) = Range("M" & i)
    Next i
    Ruta = ThisWorkbook.Path
    miPdf = "Recorrido.pdf"
    Sheets(matrix()).Copy
    Set WB = ActiveWorkbook
    On Error Resume Next
    With WB
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & miPdf, _
       Quality:=xlQualityStandar, IncludeDocProperties:=False, _
       IgnorePrintAreas:=False, OpenAfterPublish:=True
    End With
    Set WB = Nothing
Else
    MsgBox "Se eligió cancelar...", vbCritical, "EXCELeINFO"
End If
End Sub

Con respecto al nombre del pdf corresponde otra consulta con título: Como asignar nombre a un pdf ... y todo lo que quieras aclarar.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas