Guardar archivo creando carpeta y archivo con valor de celda excel 2016 Macro

Ya hay un topic parecido al mio solo que no se logró solucionar. Espero me puedan ayudar.
Estoy haciendo un excel de cotización de productos, y la idea es que apretando un botón, la información se registre en una segunda pestaña (grabar macro); acto seguido, se cree una carpeta con el nombre "Cotización N°[XXX]" en un lugar ya definido, y se guarde la cotización en formato PDF en esa carpeta. (Osea, respaldar la cotización en una carpeta nueva)
De esa forma puedo crear cotizaciones, y dejarlas respaldadas en el disco y en la pestaña del mismo excel. La primera parte de grabar macro la tengo lista, la segunda parte de crear una carpeta y guardar el archivo en PDF con nombre de la cotización es lo que me hace falta.
Ví este Topic
Macro para guardar archivo excel, con nombre de celda, en una carpeta creada por la misma macro.
Y probe usando esta macro

Sub guarda_archivo()
'por.dam
On Error Resume Next
carpeta = Range("A1") 
archivo = Range("A2")
MkDir (carpeta)
ActiveWorkbook.SaveAs Filename:=carpeta & archivo, FileFormat:=xlNormal
End Sub
*la celda A1 y A2 tienen formulas para que la carpeta y
archivo se creen con el nombre de la cotización actual.

pero solo se crea la carpeta y el archivo no se guarda (siguiendo todos los pasos) Que me hará falta?. Ideal que se guarde en PDF, AAAyudaaaa pleaseeeeeeeee.

3 Respuestas

Respuesta
1

Primero que todo, para guardar como PDF vas a necesitar un programa de terceros, ya que Excel no tiene esa funcionalidad de manera nativa. Te voy a ayudar con el tema de la carpeta y con guardar la hoja en dicha carpeta. Empieza con esto por ahora, aprende el principio de crear carpetas y guardar hojas, y luego dedica otro apartado al PDF. Ya que no das toda la información exacta, asumiré algunas cosas y te haré un código bastante general.

Sub crear_carpeta_guardar()
    Dim strDir As String 'declara una variable para la ruta
    Dim wb As Workbook 'declara una variable para el libro excel
    strDir = "C:\My Documents\Cotización N[XXX]\" 'aqui define la ruta, este codigo mira si la carpeta ya existe
'si no existe, entonces la crea
    If Dir(strDir, vbDirectory) = "" Then
       MkDir strDir
    End If
Application.ScreenUpdating = False
Sheets("Sheet1").Copy 'suponiendo que esta en la hoja uno, cambia el nombre
Set wb = ActiveWorkbook 
With wb
.SaveAs ""C:\My Documents\Cotización N[XXX]\Workbookname.xlsx" 'dijiste como se llamaria la carpeta, pero no como se llamaria el archivo, asi que esto tendras que modificarlo segun necesidad
'.Close False
End With
End Sub
Respuesta
1

Te anexo la macro actualizada

Sub Guarda_Archivo()
'Por Dante Amor
    carpeta = Range("A1").Value
    archivo = Range("A2").Value
    If Right(carpeta, 1) <> "\" Then carpeta = carpeta & "\"
    If Dir(carpeta, vbDirectory) = "" Then
        MkDir (carpeta)
    End If
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=carpeta & archivo & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    MsgBox "Pdf guardado"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Actualice y tampoco funciona. La carpeta se crea pero el archivo pdf no.
Logré en este rato crear el archivo pdf con otro macro que encontré por ahí, pero no se como agregarle a este macro la creación de carpeta (se guarda suelto). Se puede agregar a esta macro la creacion de carpeta? o mejor insistimos con tu macro? 

Sub GrabaryRegistrar()
'
' Macro3 Macro
'On Error GoTo aviso
Dim xcel As String
Dim zfilename As String
Dim outName As String, i As Long

Dim archivo As String
Dim ano As String


archivo = Range("p15")
ano = Range("n25")

outName = archivo

zfilename = Range("W21") & "\" & outName & " " & ano


ActiveSheet.ExportAsFixedFormat xlTypePDF, zfilename
End Sub

Adapté la macro para crear la carpeta con tu macro para guardar el pdf

Sub GrabaryRegistrar()
    '
    ' Macro3 Macro
    'On Error GoTo aviso
    Dim xcel As String
    Dim zfilename As String
    Dim outName As String, i As Long
    Dim archivo As String
    Dim ano As String
    '
    carpeta = Range("A1").Value 'poner la celda que tiene la carpeta
    If Dir(carpeta, vbDirectory) = "" Then
        MkDir (carpeta)
    End If
    '
    archivo = Range("p15")
    ano = Range("n25")
    outName = archivo
    zfilename = carpeta & "\" & outName & " " & ano
    ActiveSheet.ExportAsFixedFormat xlTypePDF, zfilename
End Sub

Si tienes dificultad, dime exactamente qué datos tienes en las celdas de archivo y de carpeta 



'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Ahí quedó perfecto!

Sub GrabaryRegistrar()
'
' Macro3 Macro
    'On Error GoTo aviso
    Dim xcel As String
    Dim zfilename As String
    Dim outName As String, i As Long
    Dim archivo As String
    Dim ano As String
    '
    carpeta = Range("W21").Value
    If Dir(carpeta, vbDirectory) = "" Then
        MkDir (carpeta)
    End If
    '
    archivo = Range("p15")
    ano = Range("n25")
    outName = archivo
    zfilename = carpeta & "\" & outName & " " & ano
    ActiveSheet.ExportAsFixedFormat xlTypePDF, zfilename
'MAcro grabado de copiar y pegar la cotizacion en otra pestaña para llevar un registro
'despues dejar la cotizacion en blanco y grabar el excel
End Sub

Siendo el W21 una formula que me va adaptando el nombre de la carpeta de destino dependiendo del numero de cotización y el nombre del cliente
(C:\Users\sebal\Google Drive\RyD todos\02 x COTIZACIONES Proyectos posibles\998-18 BERING  de la formula ="C:\Users\sebal\Google Drive\RyD todos\02 x COTIZACIONES Proyectos posibles\"&Cotizacion!P15&" "&Cotizacion!N25 donde P15 es el numero de cotizacion y N25 es el nombre del cliente)
Muchísimas gracias Dante, solucionadisimo. Y ya que estamos (juju), ¿se podrá agregar una alerta de texto tipo pop up al final del macro que informe que se respaldo y registro exitosamente la cotización?

Solamente un mensaje. Agrega al final esta línea:

Msgbox "Se respaldó y registró exitosamente la cotización"

Respuesta

Esto te puede aportar algo más

https://youtu.be/4SnjKzfWFDw

https://www.programarexcel.com/2013/05/crea-carpetas-y-guarda-archivo-con.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas