Imprimir página | Cerrar ventana

Generar PDF con el documento

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Word
Descripción del foro: Foro de Word
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=83664
Fecha de impresión: 17/Julio/2019 a las 20:35


Tema: Generar PDF con el documento
Publicado por: tribu46
Asunto: Generar PDF con el documento
Fecha de publicación: 29/Abril/2018 a las 10:41
Buenos dias a tod@s, tengo un documento de word que cumplimento desde un formulario y finalmente puedo seleccionar que número de paginas imprimir del total del documento.
Hasta ahí todo bien, el problema surge cuando intento que en lugar de imprimir me genere un PDF con las mismas hojas, he conseguido que me genere un PDF completo con todas las paginas del documento, pero no consigo que me genere un PDF sólo con las paginas seleccionadas.

A continuación os dejo el código usado, a ver si me podéis ayudar.

Un saludo

CODIGO PARA IMPRIMIR

Private Sub CommandButton2_Click()

Dim paginas As String

paginas = ""
Selection.MoveUp Unit:=wdParagraph, Count:=19
Selection.WholeStory
Selection.Fields.Update
Selection.MoveUp Unit:=wdLine, Count:=10


If CheckBox2.Value = True Then paginas = paginas + "3,"
If CheckBox4.Value = True Then paginas = paginas + "10,"
If CheckBox5.Value = True Then paginas = paginas + "6,7,"
If CheckBox6.Value = True Then paginas = paginas + "8,"
If CheckBox7.Value = True Then paginas = paginas + "9," 
If CheckBox8.Value = True Then paginas = paginas + "4," 
If CheckBox9.Value = True Then paginas = paginas + "5," 
If CheckBox1.Value = True Then paginas = paginas + "1,2,"


If paginas = "" Then Exit Sub
paginas = Left(paginas, Len(paginas) - 1) ' quito la ultima coma ","
Application.PrintOut filename:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=paginas, PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False

End Sub


CODIGO USADO PARA PDF


Private Sub PDF_Click()
Dim paginas As String
paginas = ""
Selection.MoveUp Unit:=wdParagraph, Count:=19
Selection.WholeStory
Selection.Fields.Update
Selection.MoveUp Unit:=wdLine, Count:=10

Dim ts As String
ts = Format((Date), "yyyyMMdd")
ts = ts + Format((Time), "HHmmss")

Dim filename As String
filename = ActiveDocument.Path + "\" + ts + "_" + UserForm1.ape1 + "_" + UserForm1.ape2 + "_" + UserForm1.nom + ".pdf"

ActiveDocument.ExportAsFixedFormat OutputFileName:= _
filename, 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
End Sub



Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 29/Abril/2018 a las 11:20
No he hecho pruebas (no dispongo de tiempo) pero se me ocurre una idea:

- Elimina las hojas que no necesitas.
- Guarda en PDF completo.
- Cierra el documento SIN guardar cambios.
- Abre de nuevo el documento.





-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: tribu46
Fecha de publicación: 29/Abril/2018 a las 12:05
Gracias, pero no eso lo que quiero, también podría usar una impresora virtual tipo pdf creator, pero lo que quiero es que al hacer click se genere un pdf con los documentos seleccionados.
De momento he conseguido que me genere un PDF con todos, pero me gustaría poder elegir cuales, al igual que al imprimir.


Publicado por: prga
Fecha de publicación: 29/Abril/2018 a las 12:17
Hola.
Otra alternativa, como has comentado, sería una impresora PDF que sí permite elegir páginas ( no intervalos).
Creo, y digo creo, que al menos el  win10 trae una de "serie" y sí he entendido bien, se puede solucionar el problema con un código parecido al siguiente:

    ActivePrinter = "Microsoft Print to PDF"
    mispaginas = "2,4,6"
    mifichero = ActiveDocument.Path & "\" & "NuevoNombre.pdf"
    Application.PrintOut FileName:="", OutputFileName:=mifichero, Range:=wdPrintRangeOfPages, Item:= _
        wdPrintDocumentWithMarkup, Copies:=1, Pages:=mispaginas, PageType:= _
        wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
        PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0


espero que ayude a resolver la duda
Ya comentas.
Un saludo a todos


Publicado por: tribu46
Fecha de publicación: 29/Abril/2018 a las 16:47
Gracias Prga

He estado probando y si bien el código que me facilitas funciona, no consigo que me detecte las hojas que selecciono, he pensado que otra forma seria que al hacer click sobre el botón, este me abriera la ventana de impresión ( la misma que aparece al presionar ctrl+P)
ya que desde esta ya podría seleccionar las paginas así como la impresora a usar ( microsoft print pdf, pdf creator.....) 

El problema es que desconozco el comando o código para que se abra.


Publicado por: prga
Fecha de publicación: 29/Abril/2018 a las 21:30
Hola.
Prueba con algo parecido a:

Dialogs(wdDialogFilePrint).Show

Espero que sea lo solicitado
Ya comentas.
Un saludo a todos


Publicado por: tribu46
Fecha de publicación: 30/Abril/2018 a las 09:58
Buenos dias Prga

Te contesto por puntos, para aclararnos

1º He conseguidio adaptar el código que me facilites, para que imprima desde "Microsoft Print to PDF" el problema es que esto me cambia la impresora predeterminada y claro al imprimir otros documentos....
Habría alguna forma de solucionarlo??

2º La otra opción funciona perfectamente, se abre el dialogo para seleccionar la impresora sin mayor problema.


Un saludo y muchas gracias


Publicado por: prga
Fecha de publicación: 30/Abril/2018 a las 10:38
Hola.
Una posible solución pasa por "cargar" antes el nombre de la impresora y recuperarlo despues, o sea:

Dim miimpresora As String
miimpresora = ActivePrinter

ActivePrinter = "Microsoft Print to PDF"
    mispaginas = "2,4,6"
    mifichero = ActiveDocument.Path & "\" & "NuevoNombre.pdf"
    Application.PrintOut FileName:="", OutputFileName:=mifichero, Range:=wdPrintRangeOfPages, Item:= _
        wdPrintDocumentWithMarkup, Copies:=1, Pages:=mispaginas, PageType:= _
        wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
        PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
        
ActivePrinter = miimpresora

espero que ayude a resolver la duda.
Ya comentas.
Un saludo a todos




Publicado por: tribu46
Fecha de publicación: 30/Abril/2018 a las 16:14
SOLUCIONADO!!!!!!!


Muchas gracias por tu ayuda y paciencia.  



Imprimir página | Cerrar ventana