Carpetas Año y Nombre del Mes

Quiero identificar como Crear las Carpetas automáticamente; Que procedimiento de VBA debo utilizar para buscar la Carpeta principal "D:\XXXX", posteriormente guardar archivos de xlsx al diario y que los deje en la Carpeta del Mes en el que trabajo; la macro debe crear una carpeta con el nombre del año actual, previamente verifica si la carpteta existe o no, en caso de no existir la crea, una vez realizado esto; verifica en la carpeta creada o ya existente si se encuentra dentro de ella una subcarpeta con el nombre del mes actual; en caso de no existir la crea, y por ultimo guarda el archivo que necesito cada que lo ejecute, Ej: "D:\XXXX\Año\Mes

Encontré un ejemplo que solo Crea el año, la dejo como guía, ¿alguien puede ayudarme?

Sub CrearCarpetasYearMenoth ()
Dim Mes1 As String
Dim Mes, año As Integer
año = Year(Date)
Mes = Month(Date)
Select Case Mes
Case 1
Mes1 = "Dic"""
Case 2
Mes1 = "Ene"""
Case 3
Mes1 = "Feb"""
Case 4
Mes1 = "Mar"""
Case 5
Mes1 = "Abr"""
Case 6
Mes1 = "May"""
Case 7
Mes1 = "Jun"""
Case 8
Mes1 = "Jul"""
Case 9
Mes1 = "Ago"""
Case 10
Mes1 = "Sep"""
Case 11
Mes1 = "Oct"""
Case 12
Mes1 = "Nov"""
End Select
If Mes1 = "Dic" Then
año = año - 1
End If
Path0 = "D:\" & "Hoja Trabajo"
If Dir(Path0, vbDirectory) = "" Then
MkDir Path0
End If
Path1 = "D:\" & "Hoja Trabajo\" & año
If Dir(Path1, vbDirectory) = "" Then
MkDir Path1
End If
Path2 = "D:\" & "Hoja Trabajo\" & año & "\" & Format(Mes1, "Mmmm")
If Dir(Path2, vbDirectory) = "" Then
MkDir Path2
End If
End Sub

Respuesta
1

El VB no es lo mío, pero como parece que nadie te responde voy a ver si puedo aportarte algo.

Empezaré por intentar comprobar si he entendido bien lo que necesitas.

Partimos de una carpeta ya existente (D:\XXXX).

Cuando se ejecute la rutina de VB (no me queda claro cómo se hará que se ejecute, supongo que desde un entorno de Excel) comprobamos la fecha actual y aislamos el año (AAAA) y el mes (MM) ¿En forma numérica MM, o literal de tres caracteres, digamos mmm?. Si no existe la carpeta D:\XXXX\AAAA la creamos, si no existe la carpeta D:\XXXX\AAAA\MM (o D:\XXXX\AAAA\mmm) la creamos. A continuación guardamos el archivo XLSX (¿qué archivo concretamente?) en esa carpeta D:\XXXX\AAAA\MM (o D:\XXXX\AAAA\mmm).

Como digo el VB no es algo que domine, pero puedo entender, más o menos, el código que pones. Sobre ese código (que claramente opta por la opción del mes con 3 caracteres) tengo alguna cosa que decir:

1. Que se reste uno al año si el mes es diciembre solo tiene sentido si la ejecución se hace a mes vencido, por tanto en enero para diciembre.

2. Ese código no solo crea la carpeta de año (y de mes, como digo en el punto siguiente) sino también la carpeta base (el equivalente a la D:\XXXX que sería D:\Hoja trabajo) si no existiera.

3. Dices que ese código "solo Crea el año" pero a mí me parece que también crea la carpeta de mes, aunque no sé que se supone que hace la parte "Format(Mes1, "Mmmm")"

4. Lo que se echa en falta es el comando que debe guardar la hoja que corresponda en el "Path2"

No sé si esto puede ayudarte en algo pero si nadie más interviene podemos intentar sacarlo adelante.

He estado investigando y parece que format(var, "Mmmm") debería presentar el nombre completo del mes si la variable var contiene una fecha. Por tanto en este ejemplo no parece muy adecuado porque Mes1 contiene una cadena de caracteres (string)

Hola, de antemano muchas gracias por tomar un tiempo para mí consulta, lo que busco es una rutina que me cree la carpeta del año y luego dentro de esta el mes, que en caso de no existir la cree siempre en la carpeta "D/:XXXXX", la información que guardardo es con día caído y es por ello que adjunto la rutina ejemplo, el Formato de la carpeta de mes es Con el Nombre Completo, sin embargo no me ej cuya el paht2 si la ejecutó en mí computador, la necesito en BB debido a que la requiero para que complete otras macros y me guarde la información automáticamente.

Prueba con esto:

Sub CrearCarpetasAñoMes()
año = Year(Date)
Path0 = "D:\" & "XXXX"
If Dir(Path0, vbDirectory) = "" Then
MkDir Path0
End If
Path1 = "D:\" & "XXXX\" & año
If Dir(Path1, vbDirectory) = "" Then
MkDir Path1
End If
Path2 = "D:\" & "XXXX\" & año & "\" & Format(Date, "Mmmm")
If Dir(Path2, vbDirectory) = "" Then
MkDir Path2
End If
End Sub

He respetado la carpeta D:\XXXX. Por supuesto puedes cambiar XXXX por "Hoja Trabajo" como figuraba en tu ejemplo. Y no incluye correcciones para el primer día de enero, que podría dar problemas. Ni tampoco el salvado del archivo xlsx porque no sé si se trata del libro en el que está la rutina o algún otro.

Tal vez fuera mejor poner "Date - 1" donde he puesto "Date" si, como dices, se ejecuta "con día caído" (que interpreto como "día siguiente")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas