Macro guardar como PDF preguntando ruta y nombre

Estoy trabajando en unas macros de excel y tengo un problema que no he conseguido resolver.

Quiero que una macro me exporte la tabla de excel que tengo en formato PDF, y que lo haga en dos sitios distintos.

El primer sitio de guardado es en el mismo lugar donde se encuentra el archivo excel, y el nombre vendrá determinado por una serie de celdas. Esta parte del macro la tengo resuelta.

Pero quiero que además se guarde también en otra carpeta. El nombre de este archivo quiero ponerlo yo cada vez, y la carpeta donde se va a guardar cambia cada vez y no tiene nada que ver en ninguna celda del excel, es decir, tendría que seleccionar yo la carpeta cada vez.

De momento tengo esto:

Sub exportar_pdf()
ActiveSheet.Unprotect
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "/" & "Factura " & [T1] & [U1] & [V1], Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Application.Dialogs(xlDialogSaveAs).Show
ActiveSheet.Protect
End Sub

El problema es que cada vez que se me abre el cuadro de guardar como, por defecto en tipo de archivo me sale como EXCEL.

¿Se podría hacer que salga por defecto en PDF? Además me gustaría que me abriese ese ultimo archivo que me ha generado una vez guardado.

Respuesta
5

Esta sería la macro

Sub exportar_pdf()
'Mod.Por.DAM
With Application.FileDialog(msoFileDialogSaveAs)
    .Title = "Guardar archivo como"
    .AllowMultiSelect = False
    '.InitialFileName = mes
    .FilterIndex = 25 'como PDF
    If .Show Then
        march = .SelectedItems(1)
    End If
End With
ActiveSheet.Unprotect
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "Factura " & [T1] & [U1] & [V1], Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveSheet.Protect
End Sub

Saludos. Dante Amor
No olvides finalizar la pregunta.

Buenos días.

Antes de nada, darte la gracias por la respuesta.

En principio funciona bien, pero creo que hay que pulirla un poco. (por desgracia mis conocimientos de VB no son suficientes, asi que te vuelvo a pedir ayuda)

Primero me gustaría saber para que sirve la cadena:

.InitialFileName = mes

Le he quitado el ' para que entrase en ejecución y no ha hecho nada. Yo pensaba que era para que en la casilla de nombre te saliese eso por defecto, pero va a ser que no. Estaría bien poder hacer algo así.

El problema que he encontrado es que una vez te sale el cuadro de dialogo, si le das a cancelar, los dos archivos se generan igualmente. Uno en la misma carpeta donde esta el archivo, y otro en la carpeta que estabas viendo en el cuadro de dialogo con el nombre del archivo de excel. Debería cancelarse la creación de estos archivos si le das a cancelar.

Gracias de nuevo.

Esta línea, efectivamente es para poner un nombre inicial de archivo, en la macro estaba deshabilitada, pero ya la habilité y te puse un ejemplo, el nombre de archivo debe ir entre comillas:

.InitialFileName = "nombre"

También le puse la condición, si le das cancelar no haga nada.

Sub exportar_pdf()
'Por.DAM
With Application.FileDialog(msoFileDialogSaveAs)
    .Title = "Guardar archivo como"
    .AllowMultiSelect = False
    .InitialFileName = "nombre"
    .FilterIndex = 25 'como PDF
    If .Show Then march = .SelectedItems(1) Else Exit Sub
End With
ActiveSheet.Unprotect
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "Factura " & [T1] & [U1] & [V1], Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveSheet.Protect
End Sub

Saludos. Dante Amor
No olvides finalizar la pregunta.

2 respuestas más de otros expertos

Respuesta

Disculpa la macros corre perfecta pero solo se guarda la primera hoja. Como le hago para que me guarde todo el libro completo.

Respuesta

¿Quisiera hacerte una pregunta si quisiera esconder la hoja cuando le doy a cancelar?'

Sub stam()
'

'ActiveSheet.Unprotect
Application.ScreenUpdating = False
Sheets("stampa").Visible = True
Sheets("stampa interna").Visible = True

With Application.FileDialog(msoFileDialogSaveAs)
.Title = "salva Come"
.AllowMultiSelect = False
.InitialFileName = "Nome"
.FilterIndex = 25 'pdf
If .Show Then march = .SelectedItems(1) Else Exit Sub
End With

Worksheets("stampa interna").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & " AZIENDA" & [B8] & [E13] & [H13], _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 'dopia copia si abilitiamo

Worksheets("stampa").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Sheets("stampa").Select
Range("A1:I78").Select
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select

Sheets("stampa").Visible = False
Sheets("stampa interna").Visible = False
'ActiveSheet.Protect
End Sub

Sub stam()
'

'ActiveSheet.Unprotect
Application.ScreenUpdating = False
Sheets("stampa").Visible = True
Sheets("stampa interna").Visible = True

With Application.FileDialog(msoFileDialogSaveAs)
.Title = "salva Come"
.AllowMultiSelect = False
.InitialFileName = "Nome"
.FilterIndex = 25 'pdf
If .Show Then march = .SelectedItems(1) Else Exit Sub
End With

Worksheets("stampa interna").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & " AZIENDA" & [B8] & [E13] & [H13], _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 'dopia copia si abilitiamo

Worksheets("stampa").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=march, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Sheets("stampa").Select
Range("A1:I78").Select
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select

Sheets("stampa").Visible = False
Sheets("stampa interna").Visible = False
'ActiveSheet.Protect
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas