Crear un pdf

Tengo un libro de excel con varias hojas. Quiero crear un pdf por cada una de las hojas y que el nombre de cada uno de esos pdf sea el del nombre de cada una de las hojas. Por supuesto que tiene que ser de forma automática.

1 respuesta

Respuesta
1
La macro debería ser algo como esto:
Sub ImprimirPDF()
Dim PDFFileName As String
Application.ActivePrinter = "Adobe PDF on Ne01:"
i = Sheets.Count
For j = 1 To i
Worksheets(j).Select
PDFFileName = "c:\temp\" & ActiveSheet.Name & ".pdf"
SendKeys PDFFileName & "{ENTER}", False
ActiveSheet.PrintOut
PSFileName = Chr(34) & PDFFileName & Chr(34)
Next j
End Sub
Revisa cuál es el nombre de tu impresora al imprimir en Acrobat, puede ser como yo lo coloqué o puede ser:
"Acrobat PDFWriter on LPT1:"
Hola Tavopz:
Olvida mi mensaje anterior ya que esta arreglado.El problema estaba en que mi impresora se llama "Adobe PDF en Ne01 :"
Ahora el problema esta en que me pide el nombre del archivo para crear el pdf y me sugiere el del nobre del archivo excel (libro1) en lugar del de la hoja activa. Si le doy ACEPTAR, empieza a crearlo y me vuelve a solicitar nombre para la segunda hoja y ahora me sugiere c:\temp\nombre de la 2º hoja.
Si aquí le pongo el nombre de la 2ª hoja, entonces me crea el pdf correctamente pero ya no me pide el nombre para la tercera y ademas se queda activa la ventana de crear pdf.
¿Te suena esto?
Te reitero mis infinitas gracias por tu ayuda. Ademas estoy aprendiendo mucho. Saludos.
jigarcia
Hola Tavopz:
Lo primero muchísimas gracias por tu interés. Te lo agradezco infinito.
Ahora te comento que no me funciona por que me da el siguiente error:
"Se ha producido el error '1004' en tiempo de ejecución"
"Error en el método 'ActivePrinter' de objeto '_Aplicattion'"
Cuando desde Excel quiero hacer un Pdf, la impresora me aparece como "Adobe PDF" que es lo que he puesto, como me has indicado, en Application.ActivePrinter.
¿Qué puede estar pasando?
Muchas gracias de nuevo por tu inestimable ayuda.
jigarcia
En la línea:
PDFFileName = "c:\temp\" & ActiveSheet.Name & ".pdf"
Coloqué una ubicación cualquiera que se me ocurrió, sin embargo, debes cambiarlo por la ubicación donde deberían quedar tus archivos.
Por otro lado, si ya has ejecutado la macro es posible que te pregunte si deseas sustituir el archivo que ya existe.
Te recomiendo lo siguiente, para saber cómo configurar la impresora desde VBA, graba una macro haciendo todo el procedimiento de imprimir.
Es decir, inicias la grabación de la macro y le das imprimir, seleccionas la impresora, e imprimes un archivo cualquiera. Luego revisas la macro que grabaste y copias la parte de configuración de la impresora en la macro que te envíe.
¿Finalmente cómo quedó tu macro?
Hola,
No es un problema de path ni de que ya exista el archivo. El problema esta en que no le pasa el nombre de la hoja al Acrobat para hacer el pdf y me saca la ventana en la que me pide el nombre del pdf que va a crear y ademas me propone como nombre libro1.pdf, osea el nombre del libro excel. Si al menos me propusiera el nombre de la hoja, podría pensar que el problema esta en que no coge el ENTER, pero no es el caso.
Gracias.
jigarcia
Esta es la macro.
Sub Imprimir_a_Pdf()
'
' Acceso directo: CTRL+p
'
MsgBox "The name of the active printer is " & _
Application.ActivePrinter
Dim PDFFileName As String
Application.ActivePrinter = "Adobe PDF en Ne00:"
i = Sheets.Count
For j = 1 To i
Worksheets(j).Select
Let PDFFileName = ActiveSheet.Name & ".pdf"
MsgBox "El nombre del fichero PDF es " & _
PDFFileName
SendKeys PDFFileName & "{ENTER}", False
ActiveSheet.PrintOut
PSFileName = Chr(34) & PDFFileName & Chr(34)
Next j
'
End Sub
Mi libro de prueba se llama libro1.xls y tiene 3 hojas.
Prueba con esta opción:
Sub imprimir()
Dim PSFileName As String
Dim PDFFileName As String
Dim MySheet As Worksheet
i = Sheets.Count
For j = 1 To i
Worksheets(j).Select
PSFileName = "c:\temp\" & ActiveSheet.Name & ".ps"
PDFileName = "c:\temp\" & ActiveSheet.Name & ".pdf"
Set MySheet = ActiveSheet
MySheet.PrintOut copies:=1, preview:=False, _
ActivePrinter:="Acrobat Distiller", printtofile:=True, collate:=True, _
prtofilename:=PSFileName
Dim myPDF As PdfDistiller
Set myPDF = New PdfDistiller
myPDF.FileToPDF PSFileName, PDFFileName, ""
Next j
End Sub
Hola de nuevo Tavopz:
No quiero dejar de agradecerte tu enorme interés con mi problema.
Ahora ejecuto la nueva macro y me da el siguiente error:
"Error de compilación"
"No se ha definido el tipo definido por el usuario"
Y en la macro se para y queda marcada en azul donde pone:
myPDF As PdfDistiller
Muchas gracias.
jigarcia
Hola Tavopz:
No quisiera meterte prisa pero estoy esperando tu respuesta a mi ultimo error. Si puedes ayudarme te agradecería me respondiaras lo antes posible ya que esto es un tema de mi trabajo y la verdad es que yo estoy perdido.
Si no me pudieras ayudar más, házmelo saber también para finalizar esta pregunta.
Saludos.
jigarcia
El segundo código que te envíe quería probarlo ya que este depende del tipo de instalación que tengas del Acrobat.
Te cuento que hice otras pruebas con el primer código y funciona, pero debes manualmente ingresar a Propiedades de la impresora y des-seleccionar la opción "Prompt for Adobe PDF filename".
La verdad es que no sabría como más ayudarte, ya que a mí me funciona (con mi configuración de Acrobat y la prueba que hago de una hoja de cálculo).
Hola:
Perdona que no te haya contestado ni cerrado la pregunta pero es que he estado haciendo pruebas y he descubierto que el problema es mi version de Acrobat (he probado con la 6.0 y la 7.0) ya que haciendo todo esto con un software para hacer pdf gratuito que conseguí en internet, funciona perfectamente. ¿Sabes si esta macro tiene alguna limitación en cuanto a la version de Acrobat?
Muchas gracias.
Un saludo.
jigarcia
La verdad si es muy posible que se trate de algún problema con la versión (aunque no debería ser así).
Me alegra que hayas conseguido que funcione.
Por favor finaliza la pregunta, si tienes alguna otra no dudes en hacerla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas