Colección de citas famosas - Slogan de motivación - Comando macro de carpeta transversal de Excel

Comando macro de carpeta transversal de Excel

VBA tiene tres formas de recorrer carpetas. Entre estos tres métodos, la búsqueda de archivos no es adecuada para las versiones 2007 y 2010. Es lento y el método recursivo también lo es. Simplemente use el método de DIR y bucle, que es muy rápido. El siguiente es el código para los tres métodos:

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

Cuando ltDic.

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;