Macro vba donde crea carpeta y sub-carpeta basado en celdas y en las subcarpetas crea archivos de excel también basados en celda

El tema es el siguiente tengo una hoja de excel donde cree una macro que me creaba una carpeta con el nombre de cliente que designaba en una celda y posteriormente dentro de esta carpeta creaba archivos de Excel o Word que con nombres ya registrados en la misma hoja.

Pero ahora se me ha presentado que debo clasificar los datos, entonces, a parte de crear la carpeta CLIENTE, ahora debo crear una SUB-CARPETA con el nombre de cada proceso, este nombre sale listado en celdas y al lado de cada una de ellas, esta el archivo que debe crear dentro de cada una de ellas y también registrados en celdas.

Coloco un ejemplo como ilustración:

        A                  B                        C

1  Cliente     Proceso 1     Archivo 1.xls
2                    Proceso 1     Archivo 2.xls

3                    Proceso 2     Archivo 3.xls
4                    Proceso 3    Archivo 4.xls

5                    Proceso 3    Archivo 5.xls

Y así sucesivamente, manejando el archivo por independiente puedo crear los archivos y el nombre de la carpeta cliente, pero he intentado adicionar que me cree la sub-carpeta para que me cree los archivos que corresponda según cada proceso en su carpeta y no le he encontrado la vuelta.

Anexo el código a ver que estoy haciendo mal o que no estoy tomando en consideración:

Option Explicit
Sub Crear_Click()
Application.ScreenUpdating = False
'Declaración variables de aplicaciones
Dim wordapp As Word.Application
Dim Excelapp As Excel.Application
'Declaración de Variables para creación de Documentos
Dim fs As FileSystemObject
Dim Documentow As Document
Dim Documentox As Workbook
'Declaración de Variables para dirección, extensión y clave de los documentos
Dim Dirección, Extensión, Clave, Cliente, Sub_Carpeta As String
Dim Files, Files2, i, j As Integer
'Seteando Aplicación para que recree un archivo cada vez que se lea un archivo
Set wordapp = New Word.Application
Set Excelapp = New Excel.Application
Set fs = New FileSystemObject
'Ubica el cursor donde se encuentran los nombres de los archivos a crear según selección
Range("A2").Select
Sub_Carpeta = Cells(Rows.Count, 1).End(xlUp).Row

Range("B2").Select
Files = Cells(Rows.Count, 1).End(xlUp).Row

'Inicializando el ciclo de lectura de las celdas
For j = 2 To Sub_Carpeta

'Asignando valores a las variables
Extensión = Range("Q1").Value
Clave = Range("S1").Value
Cliente = Range("D2").Value
Dim Inicial_Sub_Carpeta As String
Dim Nombre_Sub_Carpeta As String
Inicial_Sub_Carpeta = ThisWorkbook.Worksheets(1).Cells(j, 1).Value
'Validando si hay lineas en blanco.
If Inicial_Sub_Carpeta = "" Then
Else
Nombre_Sub_Carpeta = ThisWorkbook.Worksheets(1).Cells(j, 1).Value
Dirección = Trim(ThisWorkbook.Path & "\" & Cliente & "\" & Nombre_Sub_Carpeta)
If fs.FolderExists(Direccion) = False Then
MsgBox (fs.FolderExists(Direccion))
Else
fs.CreateFolder (Direccion)
End If

For i = 2 To Files
'Inicializando variables del Ciclo
Dim Inicial_Archivos As String
Dim Nombre_Archivos As String

'Asignando valores según la posición que se encuentre la información en la hoja
Inicial_Archivos = ThisWorkbook.Worksheets(1).Cells(i, 2).Value
'Validando si hay lineas en blanco.
If Inicial_Archivos = "" Then
Else
Nombre_Archivos = ThisWorkbook.Worksheets(1).Cells(i, 2).Value

Select Case Extensión

Case Extension To "xlsm"

If Clave = Empty Then
Set Documentox = Excelapp.Workbooks.Add
Documentox.SaveAs Filename:=Dirección & "\" & Nombre_Archivos, _
FileFormat:=52, Password:=""
Documentox.Close savechanges:=True
Else
Set Documentox = Excelapp.Workbooks.Add
Documentox.SaveAs Filename:=Dirección & "\" & Nombre_Archivos, _
FileFormat:=52, Password:=Clave
Documentox.Close savechanges:=True
End If

End Select

End If
'Finalizamos o inicializamos el ciclo nuevamente hasta validar todas las lineas
Next i
End If
Next j

wordapp.Application.Quit
Excelapp.Application.Quit

'Borramos las variables para que inicialicen en blanco.
Set fs = Nothing
'Set objselection = Nothing
Set Documentow = Nothing
Set Documentox = Nothing
Set wordapp = Nothing
Set Excelapp = Nothing
Range("A1").Select

Application.ScreenUpdating = True
End Sub

Te agradezco mucho el apoyo de antemano a ver si puedes ver porque no funciona, se que tiene que ver algo en la forma como corre en bucle, pero no se que parte.

1 Respuesta

Respuesta
1

La macro que pusiste solamente crea documentos de excel, comenté algunas líneas de la creación de documentos word.

Te regreso la macro actualizada. Prueba para la generación de carpetas y subcarpetas y archivos de excel.

'Option Explicit
Sub Crear_Click()
'Act por Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Declaración variables de aplicaciones
    Dim wordapp As Word.Application
    Dim Excelapp As Excel.Application
    'Declaración de Variables para creación de Documentos
    Dim fs As FileSystemObject
    Dim Documentow As Document
    Dim Documentox As Workbook
    'Set wordapp = New Word.Application
    Set Excelapp = New Excel.Application
    Set fs = New FileSystemObject
    u = Cells(Rows.Count, 1).End(xlUp).Row
    ruta = ThisWorkbook.Path & "\"
    Extension = Range("Q1").Value
    Clave = Range("S1").Value
    Cliente = Range("D2").Value
    'Inicializando el ciclo de lectura de las celdas
    For i = 2 To u
        carpeta = Cells(i, "A").Value
        subcarp = Cells(i, "B").Value
        archivo = Cells(i, "C").Value
        '
        dir1 = ruta & carpeta
        dir2 = ruta & carpeta & "\" & subcarp
        If fs.FolderExists(dir1) = False Then fs.CreateFolder (dir1)
        If fs.FolderExists(dir2) = False Then fs.CreateFolder (dir2)
        Select Case Extension
            Case "xlsm"
                If Clave = "" Then wpass = Clave Else wpass = ""
                Set Documentox = Excelapp.Workbooks.Add
                Documentox.SaveAs Filename:=dir2 & "\" & archivo, _
                    FileFormat:=52, Password:=Clave
                Documentox.Close savechanges:=True
        End Select
    Next
    '
    'wordapp.Application.Quit
    Excelapp.Application.Quit
    'Borramos las variables para que inicialicen en blanco.
    Set fs = Nothing
    'Set objselection = Nothing
    Set Documentow = Nothing
    Set Documentox = Nothing
    Set wordapp = Nothing
    Set Excelapp = Nothing
    Application.ScreenUpdating = True
End Sub

Te recomiendo que pongas tus datos completos, por ejemplo:

el resultado será algo como esto:



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

Muchisimas ¡Gracias!  Dante, 

Ya vi donde estaba fallando, con respecto a lo de Word no te preocupes el código es el mismo que tiene el de Excel, con la diferencia que donde se pone la Extensión se coloque la de Word, se agregue el código, de por si esta hecho, solo es adicionarlo ahí mismo, no lo puse porque ya el código era demasiado largo y la esencia principal era subir un caso, pero ya con esto quedo.

Muchísimas gracias de verdad por el apoyo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas