Optimizar Consolidación de archivos en VBA
¿Cómo están?
Espero que bien, les cuento tengo una macro que consolida archivos en función a dos parámetros (ruta de archivos y ubicación de nombre de archivo), esta macro consolida y luego selecciona el nombre de la carpeta que lo contiene para agregarlo como una columna al inicio. Hasta ahí todo bien, inicialmente eran 500 archivos, pero ahora son aproximadamente 1200 archivos y este procesodura una hora, por lo que pido su ayuda para optimizar el tiempo.
Aqui el codigo:
Function BuscarHoja1(nombreHoja As String) As Boolean
Dim i
For i = 1 To Worksheets.Count
If Worksheets(i).Name = nombreHoja Then
BuscarHoja1 = True
Exit Function
End If
Next
BuscarHoja1 = False
End Function
Sub DoFolder(Folder)
Dim SubFolder
Dim ruta
Dim PrimeraCelda As Long ' captura el valor de la primera celda vacia
Dim UltimaFila As Long 'captura el valor de la ultima fila
Dim StorePath() As String
Dim StoreName As String
'---
Dim rowita 'Almacena el numero de filas actuales para quitar encabezado
Dim columnita 'Almacena el numero de columas actuales para quitar encabezado
Dim celdapegado
For Each SubFolder In Folder.SubFolders
DoFolder SubFolder
Next
Dim File
For Each File In Folder.Files
Dim flDate As Date
If Left(File.Name, 2) = "VE" And Right(File.Name, 4) = ".DBF" Then
cuentaarchivos = cuentaarchivos + 1
Debug.Print File.Path
StoreName = File.Path
StorePath = Split(StoreName, "\")
StoreName = StorePath(UBound(StorePath) - UserForm1.numero)
Debug.Print StoreName
Workbooks.OpenText Filename:=(File.Path)
[BaseDeDatos].Select
'declaro las variables para que cumplan aqui en esta seleccion
rowita = Selection.Rows.Count 'Cuenta el numero de filas seleccionadas
columnita = Selection.Columns.Count 'Cuenta el numero de columnas seleccionadas
'Si las filas de la tabla a copiar
If rowita > 1 Then Range(Cells(2, 1), Cells(rowita, columnita)).Select
If rowita <= 1 Then Range(Cells(2, 1), Cells(2, 16)).Select
Selection.Copy
ruta = ActiveWorkbook.Path
Workbooks(ESTELIBRO).Activate
celdapegado = Range("A1048576").End(xlUp).Row + 1
Cells(celdapegado, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Revisar si en la A1 hay algo y que desplace hasta buscar
Workbooks(ESTELIBRO).Activate
PrimeraCelda = Range("A1048576").End(xlUp).Row + 1 ' Las propiedades se guardan en variables
'Hacer el recorrido para saber la ultima fila
UltimaFila = Range("B1048576").End(xlUp).Row ' Las propiedades se guardan en variables
'selecciona el rango vacio de la primera columna
'Rango (Primera celda, ultima fila de la columna a), y lo iguala al valor de la variable tienda
If rowita > 1 Then Range(Cells(PrimeraCelda, 1), Cells(UltimaFila, 1)).Value = StoreName
'-------------
Application.DisplayAlerts = False
Workbooks(File.Name).Close
End If
Next
End Sub