Macro en Excel para crear una Carpeta con un Nombre especifico en el mismo Directorio donde esta guardado el Libro de Excel

¿Cómo están? Me gustaría completar una Macro de un archivo de excel en el cual estoy trabajando.

Ya logre que la Macro me guarde el archivo en una ruta especifica, con un nombre especifico y en pdf.

El problema surge cuando le debo enviar ese archivo a alguien, que cuando ejecuta la Macro no le funciona porque la ruta es diferente a la de mi computador.

Por esto, me gustaría modificar dicha macro, para que al ejecutarla cree una carpeta (Si no existe) con un nombre especifico y guarde el archivo allí dentro, con el nombre y la extensión que ya le especifique.

Gracias, espero puedan ayudarme. Saludos

Aquí les coloco esa parte del código:

Selection. ExportAsFixedFormat Type: =xlTypePDF, Filename:= _
"C:\Users \ MiUser\Desktop\ Carpeta\FORMATOS\Nueva carpeta \OC-Definitivas\" & Range("B4") & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
OpenAfterPublish:=True

1 Respuesta

Respuesta
1

[Hola

En realidad te complicarías más, lo más simples es que tu archivo pdf se guarde en la misma carpeta que tu archivo Excel usando:

ThisWorkBook. Path

Del mismo modo para abrir o adjuntarlo, con esa misma instrucción se puede ubicar fácilmente.

Abraham Valencia

Muchísimas gracias por tomarte el tiempo en responder. Investigando, conocí dicho parámetro y logre hacer que guardara el archivo donde esta el Libro de Excel guardado.

Voy a explicarme un poco mejor del por que necesito que sea en una carpeta especifica:

El libro tiene 2 hojas (Facturacion y Ordenes de Compra), estas poseen a su vez cada una 2 botones, uno que solo guarda el PDF (Para enviar una cotizacion o hacer la solicitud de Orden de Compra) y otro boton que ademas de guardar el PDF, afecta a otras hojas (Ventas y Compras, para afectar un inventario)

Ahora bien, yo tengo programada la Macro, para que guarde los archivos dependiendo del boton que se use, en una carpeta para Cotizaciones y otra carpeta para archivos definitivos o que afectaron el inventario..

Por esta razon, me gustaria que se pudiese guardar (O crear si no existe) en carpetas especificas, para tenerlas ordenadas, segun el caso. Ya que el boton que afecta el inventario, sigue un correlativo automatico

Gracias amigo 

[Hola

Para crear la carpeta basta algo así:

MkDir ("D:\Test")

Si es una sub carpeta necesariamente tiene que existir la carpeta principal y recién ahí se crea la sub carpeta:

MkDir ("D:\Test\SubCarpeta")

Si no existe la principal (Test para este segundo caso), dará error.

Si ya existe, no necesitas crearla:

IF Dir("rutadelacarpeta",vbDirectory)="" Then
Msgbox "La carpeta no existe"
End if

Abraham Valencia

Gracias Abraham por tu respuesta. ¿Podrías ayudarme a unir el código que ya tengo con el que me estas explicando? Ya que no se en que parte usar el ThisWorkBook. Path para que agregarlo con tu código y así pueda crear la carpeta con las subcarpetas asociadas.

Un ejemplo:

MkDir ThisWorkbook.Path & "\nombresubcarpeta"

Abraham Valencia

Muchísimas gracias Abraham, ya pude lograr que creara la carpeta, ¿pero cómo puedo linkearlo para que guarde el archivo en esa carpeta? Te muestro el código como lo hice:

'Asi hice la carpeta
Ruta2 = ThisWorkbook.Path & "\"
NomCarpeta = "NE-Definitivas"
MkDir Ruta2 & "" & NomCarpeta
' NUESTRA RUTA PARA GUARDAR LAS FACTURAS
   Sheets("Facturacion").Select
    Range("A1:E53").Select
    With Selection.Font
        .Name = "Calibri"
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
        Range("A1:E53").Select
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\Maria Bermudez\Desktop\HEBE GROUP\FORMATOS\Nueva carpeta\NE-Definitivas\" & Range("B4") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
        OpenAfterPublish:=True

Solo reemplaza tu ruta fija por la que tú mismo has creado:

Dim Ruta2$, NomCarpeta$
Ruta2 = ThisWorkbook.Path & "\"
NomCarpeta = "NE-Definitivas"
MkDir Ruta2 & "" & NomCarpeta
With Sheets("Facturacion").Range("A1:E53").Font
    .Name = "Calibri"
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .TintAndShade = 0
    .ThemeFont = xlThemeFontMinor
End With
Range("A1:E53").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Ruta2 & NomCarpeta & "\" & Range("B4") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
            OpenAfterPublish:=True

Saludos]

Abraham Valencia

¡Gracias! Abraham, eres un rockstar. Ya lo probé y funciona de maravilla. Simplemente Perfecto.

Amigo Abraham, realizando más pruebas, me pude dar cuenta que al grabar un nuevo movimiento, da error el código Run-Time error "75" Path/File access error.

Y creo que el problema es porque la carpeta ya esta creada, ya que borre la carpeta y al correr la macro de nuevo, perfectamente crea la carpeta y guarda el archivo en cuestión

Bien mis respuestas anteriores y ahí justamente te comento cómo hacer para saber si la carpeta existe o no. Relee.

Abraham Valencia

Si, de hecho intente hacerlo con el código que me facilitaste pero no logro hacer que funcione.

Ya que en el código que yo coloque, crea primero una ruta (La misma donde esta el archivo), luego un nombre de una carpeta, y luego es que crea la carpeta (con la ruta y el nombre que realice antes). O bueno, al menos eso entendí de ese código que encontré.

Ahora bien, en tu código entiendo que primero hace una búsqueda de la carpeta, y si no existe luego seria que la crea. 

Pero como va a realizar una búsqueda de una carpeta que no tiene una ruta predefinida con el ejemplo que me diste en tu código?

Debes pensar que soy muy tonto, pero es que realmente estoy intentando aprender y entender todo esto.

Es decir que en esta linea:

IF Dir("rutadelacarpeta",vbDirectory)="" Then

donde dice "rutadelacarpeta"  no puedo colocar Ruta2 solamente, ni "Ruta2 & "" & NomCarpeta", realmente he probado casi todas las combinaciones posibles intentando que funcione

Prueba así:

Dim Ruta2$, NomCarpeta$
Ruta2 = ThisWorkbook.Path & "\"
NomCarpeta = "NE-Definitivas"
If Dir(Ruta2 & "" & NomCarpeta, vbDirectory) = "" Then
    MkDir Ruta2 & "" & NomCarpeta
End If
With Sheets("Facturacion").Range("A1:E53").Font
    .Name = "Calibri"
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .TintAndShade = 0
    .ThemeFont = xlThemeFontMinor
End With
Range("A1:E53").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Ruta2 & NomCarpeta & "\" & Range("B4") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
            OpenAfterPublish:=True

Comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas