Visual Basic - Guardar un Doc Word en PDF Con dialogo Save As

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Juan Jose
Val: 10
Ha aumentado su posición en 6 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Juan Jose (5 intervenciones) el 14/04/2020 22:38:30
hola Buenas a todos

Estoy intentando guardar un archivo creado en word de manera procedural en formato en pdf , abriendo un cuadro de dialogo para preguntar donde y como se llamara .

Tengo una plantilla creada con docx que la relleno con datos de un formulario, sustituyendo los campos seleccionados mediante comando Find

1
Dim objWord As Object, wdDoc As Object

Todo Funciona correctamente , hasta que deseo guardarlo, que hasta ahora solo he podido guardarlo en docx
y quisiera guardarlo en pdf.


este es el codigo de guardado .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Cuadro de Dialogo para guardar el dato
With wdDoc.FileDialog(msoFileDialogSaveAs)
    .Title = "Guardar DAT PDF "
    .AllowMultiSelect = False
    'nombre con el que se guardara
    .InitialFileName = "Dat"
    .FilterIndex = 25 'como PDF
    If .Show Then
    march = .SelectedItems(1)
    Else
    End If
End With
'Guarda el archivo con el nombre asignado
wdDoc.SaveAs Filename:=march, FileFormat:=wdFormatXMLDocument
'wdDoc.Close
MsgBox ("El libro se generó con éxito"), vbInformation, "AVISO"

el problema lo tengo con el SaveAs , que no permite el formato pdf.

como Podria modificar dicho codigo para crear el pdf, he probado en exporfileformat , pero no me aclaro bien de como hacerlo.


Gracias Compañeros , y espero vuestra respuesta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Andres Leonardo (1798 intervenciones) el 14/04/2020 23:07:22
A lo que tengas tus datos ... solo debes poner esto solo debes cambiar los datos por el nombre del archivo, la ruta si se abre o no despues de guardarlo

espero te ayude

1
2
3
4
5
6
7
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    "C:\Users\Usuario\Documents\NombredelArchivo.pdf", ExportFormat:= _
    wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
    wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
    Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
    CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    BitmapMissingFonts:=True, UseISO19005_1:=False
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Jose
Val: 10
Ha aumentado su posición en 6 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Juan Jose (5 intervenciones) el 15/04/2020 01:42:28
Muchas Gracias por su Respuesta , pero no funciona correctamete , no me abre ni el cuadro de dialogo .

Le comento por si le sirve de ayuda que esta macro la ejecuto en una hoja de excel, desde la cual abro un formulario, que rellena una matriz mediante una consulta a la tabla y con ciertos datos recogidos de unos texbox.

de este formulario pasamos el arreglo a esta funcion , la cual carga el doc de word, busca en dicho documento unas "Etiquetas" en las que sustituye los datos el array , y mi intencion es que se guarde una copia de este documento en pdf mediante la apertura de un cuadro de dialogo.

este es el codigo de la parte de apertura del docx , rellenado y guardado.

Espero que le sirva de ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
'Recibimos un array de datos para rellenar
Function CargarDatosWord(ParamArray ArrDatosForm() As Variant)
'Aplication.DisplayAlerts = False
'definimos el objeto word
Dim objWord As Object, wdDoc As Object
Dim datos(0 To 1, 0 To 29), nombreGuardar As String, fechaGuardar As String
On Error Resume Next
'nombre de la plantilla de Word
nomarch = "Plantilla DAT"
ruta = ThisWorkbook.Path & "\" & nomarch & ".docx"
'set el objeto word para manipularlo
Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = wdAlertsNone
objWord.Visible = True
Set wdDoc = objWord.Documents.Open(ruta)
 
'datos de nombre de fichero
nomfic = "DatListo"
rutainf = ThisWorkbook.Path & "\" & nomfic & ".docx"
 
'Asignamos las variables que se deben de buscar en el doc de Word  y el texto por el que reemplazarlos
'Variables del Destino
datos(0, 0) = "[Des_Nombre]"
datos(1, 0) = ArrDatosForm(0)(0)
datos(0, 1) = "[Des_DNI]"
datos(1, 1) = ArrDatosForm(0)(1)
datos(0, 2) = "[Des_TVia]"
datos(1, 2) = ArrDatosForm(0)(3)
datos(0, 3) = "[Des_Direccion]"
datos(1, 3) = ArrDatosForm(0)(4)
datos(0, 4) = "[Des_Num]"
datos(1, 4) = ArrDatosForm(0)(2)
datos(0, 5) = "[Des_CP]"
datos(1, 5) = ArrDatosForm(0)(6)
datos(0, 6) = "[Des_Localiad]"
datos(1, 6) = ArrDatosForm(0)(5)
datos(0, 7) = "[Des_Municipio]"
datos(1, 7) = ArrDatosForm(0)(5)
datos(0, 8) = "[Des_Provincia]"
datos(1, 8) = ArrDatosForm(0)(7)
datos(0, 9) = "[Des_Tlf]"
datos(1, 9) = ArrDatosForm(0)(8)
datos(0, 10) = "[Des_Mov]"
datos(1, 10) = ArrDatosForm(0)(8)
datos(0, 11) = "[Des_Email]"
datos(1, 11) = ArrDatosForm(0)(9)
 
'Variables del cargamento
'Tipo1
datos(0, 12) = "[Art1_Tipo]"
datos(1, 12) = ArrDatosForm(0)(15)
datos(0, 13) = "[Art1_Num]"
datos(1, 13) = ArrDatosForm(0)(14)
'Tipo2
datos(0, 14) = "[Art2_Tipo]"
datos(1, 14) = ArrDatosForm(0)(17)
datos(0, 15) = "[Art2_Num]"
datos(1, 15) = ArrDatosForm(0)(16)
'Tipo3
datos(0, 16) = "[Art3_Tipo]"
datos(1, 16) = ArrDatosForm(0)(20)
datos(0, 17) = "[Art3_Num]"
datos(1, 17) = ArrDatosForm(0)(19)
'Tipo4
datos(0, 18) = "[Art4_Tipo]"
datos(1, 18) = ""
datos(0, 19) = "[Art4_Num]"
datos(1, 19) = ""
'Tipo5
datos(0, 20) = "[Art5_Tipo]"
datos(1, 20) = ""
datos(0, 21) = "[Art5_Num]"
datos(1, 21) = ""
 
'Fecha de Salida
datos(0, 22) = "[Fech_Salida]"
datos(1, 22) = ArrDatosForm(0)(10)
datos(0, 23) = "[Fech_Entrega]"
datos(1, 23) = ArrDatosForm(0)(10)
 
 
'Fecha de Firma
'Fecha Autorizante
datos(0, 24) = "[Fech_DiaA]"
datos(1, 24) = ArrDatosForm(0)(11)
datos(0, 25) = "[Fech_MesA]"
datos(1, 25) = ArrDatosForm(0)(12)
datos(0, 26) = "[Fech_AnnoA]"
datos(1, 26) = ArrDatosForm(0)(13)
 
'Fecha Transportista
datos(0, 27) = "[Fech_DiaT]"
datos(1, 27) = ArrDatosForm(0)(11)
datos(0, 28) = "[Fech_MesT]"
datos(1, 28) = ArrDatosForm(0)(12)
datos(0, 29) = "[Fech_AnnoT]"
datos(1, 29) = ArrDatosForm(0)(13)
 
'Creamos un bucle que recorra la matriz para intercambiar los datos
For i = 0 To UBound(datos, 2)
textoabuscar = datos(0, i)
objWord.Selection.Move 9, -1 'movimientos en la matriz de datos
objWord.Selection.Find.Execute FindText:=textoabuscar
'bucle para reemplazar todo el texto que encuentre
While objWord.Selection.Find.Found = True
objWord.Selection.Text = datos(1, i) 'Texto a reemplazar
objWord.Move 9, -1
objWord.Selection.Find.Execute FindText:=textoabuscar
Wend
Next i
'Activamos el doc word para guardarlo
wdDoc.Activate
'Cuadro de Dialogo para guardar el dato
With ActiveDocument.FileDialog(msoFileDialogSaveAs)
    .Title = "Guardar DAT PDF "
    .AllowMultiSelect = False
    'nombre con el que se guardara
    .InitialFileName = "Dat Generico"
    .FilterIndex = 25 'como PDF
    If .Show Then
    rutaGuardado = .SelectedItems(1)
    Else
    End If
End With
 
'Guarda el archivo con el nombre asignado
wdDoc.ExportAsFixedFormat OutputFileName:= _
        march, ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
'wdDoc.Close
MsgBox ("El libro se generó con éxito"), vbInformation, "AVISO"
objWord.Close
objWord.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
'Fecha y nombre para guardar a pdf
'fechaGuardar = ArrDatosForm(0)(10)
'nombreGuardar = ArrDatosForm(0)(0)
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Andres Leonardo (1798 intervenciones) el 15/04/2020 02:03:25
ME alegro mucho que haya podido solucionar el tema ... respecto a que no funciona no entiendo .. pues veo que en la macro qeu ud envia tenemos el mismo codigo excepto que yo lo hice con el activedocument y ud por que lo maneja desde excel crea un objeto wdDoc dato qeu no incluyo en su pregunta inicial, pues comento y cito


Estoy intentando guardar un archivo creado en word de manera procedural en formato en pdf , abriendo un cuadro de dialogo para preguntar donde y como se llamara .


Nunca indico que ud lo qeu esta haciendo es desde Excel Creando un Documento de word por esto la diferencia.En todo caso me alegro mucho que su tema quede resuelto-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Su linea para guardar
wdDoc.ExportAsFixedFormat OutputFileName:= _
        march, ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
 
 ' La Linea que yo envie
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        "C:\Users\Usuario\Documents\NombredelArchivo.pdf", ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Jose
Val: 10
Ha aumentado su posición en 6 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Juan Jose (5 intervenciones) el 17/04/2020 01:27:00
Muchas Gracias por su ayuda, y perdon por no explicarme bien, pero la parte del codigo de guardar no me funciona todavia , no me abre el cuadro de dialogo para guardar en pdf.

Por si le sirve de ayuda , le explico el proceso que sigue la macro que he creado.

En el archivo de excel existe un boton que se llama generar carta. En el cual hay un desplegable , un formulario calendario ( muy practico por cierto) para selecinar el dia, y unos selecionables para elelgir los articulos a enviar.

Pues al pulsar el boton de generar ejecuta el codigo que recoge los datos del formulario en un array, abre el documento de word , y sustituye los datos en las "etiquetas" Creadas en el formulario.
Hasta aqui todo perfecto.

y aqui viene el problema , lo de guardar el documento creado en pdf, que no abre ni el cuadro de dialogo , ni guarda en pdf.


Le adjunto los archivos ( En el excel , Modulo 5 ) Esta el codigo mencionado anteriormente.

La verdad es que llevo varios dias dandole vueltas y no consigo que funcione , no se si seran las referencias a los objetos de word , o que podra ser.


Le agradecia mucho , sinceramente su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por renatozavaleta (1 intervención) el 19/04/2020 11:27:24
Juanjo, utiliza lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub EjemploSaveAs ()
        Dim vGuardarComo As Dialog
        Set vGuardarComo = Dialogs(wdDialogFileSaveAs)
        With vGuardarComo
            .Format = wdFormatPDF
 
            resultado = .Show
            If resultado <> 0 Then
                .Execute
            Else
                Exit Sub
            End If
        End With
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Guardar un Doc Word en PDF Con dialogo Save As

Publicado por Jesus (1 intervención) el 04/04/2023 20:33:05
Buenas tardes. Tenía esta macro en Word 2016 e iba perfecto, pero me han cambiado a word 365 y la macro ya no funciona igual, me guarda el archivo como pdf pero no me lo muestra como lo hacía antes. No sé qué ha podido cambiar, les agradecería alguna orientación.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar