Comando macro de carpeta transversal de Excel
1, Método de búsqueda de archivos
Subprueba 3()
Marcar wb como libro de trabajo
Atenuarme mientras
Atenuar t
t=Temporizador
App. "Búsqueda de archivos" llama al objeto de búsqueda de archivos.
. "Nueva búsqueda" inicia una nueva búsqueda.
. 'LookIn = ThisWorkbook.path 'Establece la ruta de búsqueda.
. SearchSubFolders = True 'El alcance de la búsqueda incluye todas las subcarpetas en la carpeta especificada por la propiedad LookIn.
. Nombre de archivo = "*.xls " 'Establece el tipo de archivo que se buscará.
. FileType = msoFileTypeExcelWorkbooks
if. ejecutar() gt; devuelve 0 si se encuentra el archivo.
para I = 1 Para . archivos encontrados .
Continúe con el siguiente paso en caso de error
Celda (I, 1) =. FoundFiles(i)' Coloca los archivos encontrados en una celda.
Siguiente yo
Otros
MsgBox "Archivo no encontrado"
Terminará si...
Termina con...
Temporizador MsgBox - t
Conector final
2. Método recursivo
Subtest()
El iPath tenue es como una cuerda, yo soy como una aplicación larga
Dim t
t = timer
. Cuadro de diálogo de archivo (msoFileDialogFolderPicker)
. Título = "Seleccione la carpeta que está buscando"
Si. Entonces ejecutemos
iPath =. Seleccione Editar elemento (1)
Termina si...
Termina con...
Si iPath = "False" o Len(iPath) = 0 , luego Salir de Sub
i = 1
Llamar a GetFolderFile(iPath, I)
Temporizador de MsgBox - t
MsgBox "Obtener archivo nombre Enlace, vbOKOnly, "Preguntar"
Conector final
Archivo de carpeta privada Sub get (ByVal nPath es String, ByRef iCount es Long)
dim iFileSys
Atenuar iFile como archivo, gFile como archivo
Atenuar iFolder como carpeta, sFolder como carpeta, nFolder como carpeta
set iFileSys = CreateObject(" Scripting . Objeto del sistema de archivos")
Establecer iFolder = iFileSys.GetFolder(nPath)
Establecer sFolder = iFolder.Subfolder
Establecer iFile = iFolder.
Archivo
Con hoja activa
Para cada gFile en iFile
Hipervínculos.Agregue anclaje: =. Celdas(iCount, 1), Dirección:=gFile.path, TextToDisplay:=gFile. Nombre
iCount = iCount 1
Luego
termina con...
Atraviesa recursivamente todas las subcarpetas.
Para cada n carpetas en la carpeta s
Llame a GetFolderFile(nFolder.path, iCount)
Luego
finalice Connector
Método de bucle 3.dir
'Sub Test()' utiliza diccionarios dobles para mejorar la velocidad.
Atenuar mi nombre, Dic, Did, I, t, F, TT, mi nombre de archivo
Continúe con el siguiente paso si ocurre un error
establecer objShell = CreateObject("Shell.Application")
establecer obj carpeta = objshell . browserforfolder(0, "Select Folder", 0, 0)
Si Not objFolder no es nada, entonces LJ = carpeta obj . self . ruta amp;"\"
Establecer objFolder = Ninguno
Establecer objShell = Nada
t =Hora
Establezca DIC = createobject ("scripting.dictionary")' para crear un objeto de diccionario.
Establecer Did = CreateObject("Script. Dictionary")
Agregar(lj), ""
i = 0
Ke = Dic.keys 'Empieza a recorrer el diccionario
MyName = Dir(Ke(i), vbDirectory)'
Cuando. mi nombre lt gt""
Si mi nombre lt gt"."Mi nombre lt gt".." entonces
if(GetAttr(Ke( I) amp;myname)= VBDirectory entonces' si es un directorio secundario.
Add(g(a)and.myname." " \ "), " " 'Agregue este nombre de subdirectorio como una entrada al diccionario.
Terminará si...
Terminará si...
MiNombre = Dir 'Continuar recorriendo la búsqueda.
Timbre
i = i 1
Timbre
Listo. Add("File List"), " " 'Tome como ejemplo la búsqueda de todos los archivos EXCEL en la unidad D.
Para cada Ke en Dic.keys
mi nombre de archivo = Dir(Ke amp; "*.xls")
Hacer mientras MyFileName lt gt" "
Lo hice. Agregue (Ke amp mi nombre de archivo), ""
myfilename=directory
ring
Luego
Para esto, cada Sh. libro de trabajo. Hoja de trabajo
Si boo. Nombre = "Lista de archivos XLS"
Formulario("Lista de archivos XLS"). celúla.
Eliminar
F = Verdadero
Salir para...
Otro
F = Falso
Si. .. Terminará
Entonces
Si no es F, entonces
hojas. Add.Name = "Lista de archivos XLS"
El formulario finalizará si...
("Lista de archivos XLS"). 【A1】. cambiar tamaño (did. Count, 1) = función de hoja de trabajo. transponer (did.key).
TT = tiempo t
MsgBox Minuto(TT) y amp "minutos"; segundo lugar (TT) y tercer lugar "segundos"
Conector final;