¿Macro en excel que permita guardar varias hojas en pdf tomando el nombre de otro libro de excel?
Para : Dante Amor
Hola !
Necesito de tu ayuda nuevamente!
Mi problema es que necesito crear una macro para que al guardar hojas de excel en pdf el nombre que se le asigne al pdf, lo tome de otro libro de excel de una de las hojas de datos que contiene dicho libro, donde el nombre a asignar se encuentra en una celda de la hoja..
No se si me Explique!
1 Respuesta
H o l a:
Te anexo la macro actualizada
Sub Guardar_Libro_En_Pdf()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
ruta = l1.Path & "\"
nombre = Workbooks("otro libro.xlsx").Sheets("Hoja1").Range("D2")
If nombre = "" Then
MsgBox "La celda está vacía, no se puede guardar el archivo", vbCritical
Exit Sub
End If
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como Pdf"
.AllowMultiSelect = False
.InitialFileName = ruta & nombre
.FilterIndex = 25
If Not .Show Then Exit Sub
arch = .SelectedItems(1)
End With
l1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=arch, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "archivo pdf guardardo"
End Sub'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Disculpa!
Y si quiero tener esta misma macro en otros libros de excel ( sin estar creándola)..
¿Existe una manera fácil de realizarlo?
Ya que cuento con 100 libros de excel y quiero realizar lo mismo en cada uno con la macro para guardar hojas en un mismo pdf...
Espero tu respuesta
Disculpa!!!!
Con la macro que me enviste si me manda a pedir el nombre correctamente, pero al detectar un punto lo demas del nombre ya no coloca... Por decir el siguiente es el nombre que necesito:
MIKA LOGÍSTICA, S.A.
y solo lo coloca de la siguiente manera
MIKA CONSULTORIA LOGISTICA, S
despues del punto ya no me envia lo demas
Lo siento!
Discúlpame !
La macro ya esta correcta ! Si me guarda el archivo con el nombre completo!
Muchas Gracias por tu ayuda!
(¿Con respecto a pasar la macro a otros libros debo crear otra pregunta?)
Para que funcione la macro con cualquier libro, sin necesidad de copiar la macro en los 100 libros.
En un libro1 pon la macro y abres el libro.
En el "otro libro" supongo que vas a tener el nombre del archivo y abres el libro.
Abre el tercer libro que quieras guardar como pdf
Con el tercer libro abierto, presiona Alt + F11 para entrar a VBA y selecciona la macro y la ejecutas.
Te anexo la macro actualizada
Sub Guardar_Libro_En_Pdf()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ActiveWorkbook
ruta = l1.Path & "\"
nombre = Workbooks("otro libro.xlsx").Sheets("Hoja1").Range("D2")
If nombre = "" Then
MsgBox "La celda está vacía, no se puede guardar el archivo", vbCritical
Exit Sub
End If
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como Pdf"
.AllowMultiSelect = False
.InitialFileName = ruta & nombre
.FilterIndex = 25
If Not .Show Then Exit Sub
arch = .SelectedItems(1)
End With
l1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=arch, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "archivo pdf guardardo"
End SubPara lo del punto, vas a tener que evitar poner puntos en el nombre, ya que la aplicación asume que es una extensión, o bien, cuando te presenta el nombre, vas a tener que capturar las letras que hacen falta.
La otra opción es capturar el nombre y después seleccionar la carpeta, entonces utiliza la siguiente macro:
Sub Guardar_Libro_En_Pdf2()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ActiveWorkbook
ruta = l1.Path & "\"
nombre = Workbooks("otro libro.xlsx").Sheets("Hoja1").Range("D2")
If nombre = "" Then
MsgBox "La celda está vacía, no se puede guardar el archivo", vbCritical
Exit Sub
End If
'
res = InputBox("Captura el nombe del archivo", "GUARDAR PDF", nombre)
If res = "" Then Exit Sub
'
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Selecciona una carpeta"
.AllowMultiSelect = False
.InitialFileName = ruta
If .Show <> -1 Then Exit Sub
cp = .SelectedItems(1)
End With
'
l1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=cp & "\" & res, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "Archivo Pdf Guardardo"
End SubRecuerda, cuando ejecutes la macro, debes mantener activo el libro que vas a guardar como Pdf.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
mmm...
Discúlpame pero como te decía no tengo mucho conocimiento del tema!
En mi libro 1 creo la macro (un libro nuevo o en los que tengo datos ...).
¿En el dos que ya tengo datos y quiero imprimirlo ejecuto la macro?
¿En el tercero o siguientes que quiera imprimir los abro y desde ahí ejecuto la macro que tengo en el libro uno?
Espero me puedas ayudar! :(
Es que no entiendo qué necesitas.
Si me dices los nombres de tus libros, sería más claro.
Supongo lo siguiente
Escenario 1.
Tienes un libro1 con la macro.
Tienes un libro2, que yo le llamo "otro libro"
Tienes un tercer libro el cual vas a guardar como pdf.
Si es así realiza lo siguiente:
- En un libro1 pon la macro y abres el libro.
- En el "otro libro" supongo que vas a tener el nombre del archivo y abres el libro.
- Abre el tercer libro que quieras guardar como pdf
Escenario 2.
Tienes un libro1 con la macro y en la celda "D2", de la "Hoja1" de este mismo libro tienes el nombre del archivo con el cual se va a nombrar el pdf.
Tienes un segundo libro que vas a guardar como pdf.
Si es así.
Abre el primer libro.
Abre el segundo libro, entra a VBA y ejecuta la siguiente macro (3)
Sub Guardar_Libro_En_Pdf3()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ActiveWorkbook
ruta = l1.Path & "\"
nombre = ThisWorkbook.Sheets("Hoja1").Range("D2")
If nombre = "" Then
MsgBox "La celda está vacía, no se puede guardar el archivo", vbCritical
Exit Sub
End If
'
res = InputBox("Captura el nombe del archivo", "GUARDAR PDF", nombre)
If res = "" Then Exit Sub
'
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Selecciona una carpeta"
.AllowMultiSelect = False
.InitialFileName = ruta
If .Show <> -1 Then Exit Sub
cp = .SelectedItems(1)
End With
'
l1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=cp & "\" & res, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "Archivo Pdf Guardardo"
End Subsal u dos
MM lo he creado de la siguinte manera...
en el libro "Formatos" (que es el que quiero guardar en pdf ) es donde cree la macro.
el libro "parametros" ( es de donde mando a tomar el nombre para que me guarde en pdf las hojas del libro "mika")...
hasta aqui todo bien... si me guarda mi las hojas de mi libro "mika" en pdf y tomando el nombre del libro "parametros"..
pero ahora..
quiero guardar las hojas de mi libro "seg.Formato" de la misma manera que en el libro "Formato"... es decir guardar las hojas de mi libro "seg.Formato" tomando el nombre de otro libro llamado "seg.parametros"....
La macro seria la misma .. pero no quiero estarla creando en cada libro.. ya que cuento con 100 libros ..
Espero me explique!!
De antemano muchas gracias!!
Yo te recomiendo lo siguiente.
En un libro1 llamado "Libro con macro" deberás poner la macro.
En ese mismo libro "Libro con macro" en la hoja "parámetros", deberás poner el nombre de los archivos.
Deberías tener solamente un libro con macro y en ese libro una hoja con parámetros; y no un archivo de parámetros por cada archivo que quieras guardar como pdf.
Entonces, en la hoja parámetros tienes que poner una lista de libros xlsx y su respectivo nombre de archivo pdf.
Por ejemplo:
En el libro "Libro con macro", en la hoja "parametros", en la columna "A" pones el nombre del excel:
A B
1 Nombre excel Nombre Pdf
2 mika.xlsx ejemikawww.pdf
3 seg.Formato socieda.s.a. de c.v.
4 etc
Lo anterior es un ejemplo, te lo pongo de esa formal, porque realmente no entiendo qué quieres hacer, la macro te permite seleccionar la carpeta y poner un nombre, si vas a tomar el nombre de una "libro de parámetros", entonces para qué quieres la macro que te permita capturar el nombre.
Disculpa!! tuve un error en mi escritura.. donde dice "Mika" me refiero al libro "Formatos" que es el que guardo y en el cual e creado la macro..
Disculpa mi error!!
Espero me puedas ayudar!!
La macro no debe ir en tu archivo que vas a guardar como pdf, la macro debe estar en un libro nuevo, puedes ponerle por nombre "libro con macro"
Disculpa de acuerdo a la macro que me enviaste... que es la siguiente:
Sub Guardar_Libro_En_Pdf()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
ruta = l1.Path & "\"
nombre = Workbooks("Mika Parametros.xlsx").Sheets("Parametros").Range("K8")
If nombre = "" Then
MsgBox "La celda está vacía, no se puede guardar el archivo", vbCritical
Exit Sub
End If
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como Pdf"
.AllowMultiSelect = False
.InitialFileName = ruta & nombre
.FilterIndex = 25
If Not .Show Then Exit Sub
arch = .SelectedItems(1)
End With
l1.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=arch, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "archivo pdf guardardo"
End Sub
Me la ejecuta perfectamente en excel 2013..
Pero al querer utilizarla en excel 2007 me envía un error que dice
*Se ha producido el error '5' en proceso de ejecución:
Argumento o llamada a procedimiento no valida...
Espero me puedas ayudar!
Gracias!
Yo tengo 2007 y no tengo problemas.
En qué línea de la macro se detiene o se pinta de azul o amarillo.
Revisa que hayas copiado correctamente la macro
mmm!!
oye.. al quererlo guardar en el excel 2007.. en la pantalla que se abre para guardarlo..la de Guardar como pdf.. donde dice tipo.. no me coloca pdf (como lo hace en excel 2013), si no que me coloca *
Tipo:Complemento de Excel 97-2003...
es correcto..
Ninguna línea se pinta ...
Ejecuto el código y lo único que me manda la advertencia
** Argumento o llamada a procedimiento no valida***
Neta Espero me puedas ayudar!
En 2013 funciona bien
En 2007 funciona bien
Pero si tienes 97-2003, debes adecuar el código. O tal vez, en este excel o en esa máquina no tienen el complemento para guardar archivos como pdf.
No tengo versión 97-2003 para probar. Realiza lo siguiente, entra a tu archivo de versión 97-2003, activa la grabadora de macro, guarda el libro como archivo pdf, regresa a la grabadora de macros y presiona "Detener grabación". Entra a VBA, el código que se generó con la grabadora de macros, lo copias y lo pegas aquí para revisarlo.
- Compartir respuesta