Buscar en una Carpeta pero no en subacaretas:
Tambien con Like mas la funcion Dir() puedes buscar no recuerdo bien je.
Buscar en un director X y tambien en subcarpetas
' Variable que utilizare para cancelar la busqueda de los archivos
Public Cancelar As Boolean
' Para las busquedas de todos los archivos
Dim Spli, Count, Total ' Lo que se Busca, Cuantos, Total de los archivos encontrados
Dim Cant() ' Cantidad de cada archivo encontrado (en ste caso lo que sea parcial o extensiones)
Public Sub Buscar1(Formulario As Object, Directorio As String, A_buscar As String, Optional No_Directorios As String)
Dim i, ass
i = 0
Spli = Split(A_buscar, ",")
On Error GoTo Ok:
For i = 0 To 101
ass = Spli(i)
Count = i
Next i
Ok:
ReDim Cant(0 To Count)
Formulario.Label1(1).Caption = ""
Total = 0
For i = 0 To Count
'Cant(i) = Spli(i)
Cant(i) = 0
Formulario.Label1(1).Caption = frm_main.Label1(1).Caption & Spli(i) & ": " & Cant(i) & " "
Total = Total + Cant(i)
Next
frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & " |" & Total & " Encontrados"
Archivos (Directorio)
End Sub
Public Sub Archivos(Directorio As String)
Dim FSO, F, sf, F1
Set FSO = CreateObject("Scripting.FileSystemObject") ' Creo el objeto
Set F = FSO.getfolder(Directorio) ' Obtenemos el directorio plano
Set sf = F.SubFolders ' Obtenemos los subfolders del directorio plano actual
'SubDirectorios (Directorio) ' obtenemos los archivos del directorio a scanear
' Apartir de aqui se empiesan a explorar todos los SubDirectorios (SubCarpetas)
On Error Resume Next
For Each F1 In sf
DoEvents
frm_dat.lbl_ruta(0).Caption = F1.Path
If Cancelar = True Then Exit Sub ' Codigo para cancelar la busqueda de archivos y todo en general
SubDirectorios (F1.Path) ' Obtengo el SubDirectorio y lo cambio
If Cancelar = True Then Exit Sub ' Codigo para cancelar la busqueda de archivos y todo en general
Archivos (F1.Path) ' Obtengo los archivos del subDirectorio actual
If Cancelar = True Then Exit Sub ' Codigo para cancelar la busqueda de archivos y todo en general
Next
' Fin
End Sub
Public Sub SubDirectorios(Directorio As String)
Dim FSO, F, sf, F1, ext, i, a
i = 0
Set FSO = CreateObject("Scripting.FileSystemObject") ' Creo el objeto
Set F = FSO.getfolder(Directorio) ' Obtengo el directorio Plano
Set sf = F.Files ' Obtengo TODOS los archivos del directorio plano sin ecepción
' Apartir de aquí obtengo Todos los archivos sin ecepción
On Error Resume Next
For Each F1 In sf
ext = FSO.GetExtensionName(F1.Path)
If Cancelar = True Then Exit Sub ' Codigo para cancelar la busqueda de archivos y todo en general
For i = 0 To Count
If Spli(i) = ext Then
Total = Total + 1
Set NodX = frm_main.List.ListItems.Add(, , F1.Name) ' Visualiso los archivos en el formulario
NodX.Tag = F1.Path ' Visualiso los archivos en el formulario
Cant(i) = Cant(i) + 1
frm_main.Label1(1).Caption = ""
For a = 0 To Count
frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & Spli(a) & ": " & Cant(a) & " "
Next a
frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & " |" & Total & " Encontrados"
End If
Next i
Next
'fin
End Sub
Si no te satisfacen estos ejemplos con objectos aca uno por via Api sacado de la WinApi
'Create a form with a command button (command1), a list box (list1)
'and four text boxes (text1, text2, text3 and text4).
'Type in the first textbox a startingpath like c:\
'and in the second textbox you put a pattern like *.* or *.txt
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function
Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
'KPD-Team 1999
'E-Mail: KPDTeam@Allapi.net
'URL: http://www.allapi.net/
Dim FileName As String ' Walking filename variable...
Dim DirName As String ' SubDirectory Name
Dim dirNames() As String ' Buffer for directory name entries
Dim nDir As Integer ' Number of directories in this path
Dim i As Integer ' For-loop counter...
Dim hSearch As Long ' Search Handle
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
If Right(path, 1) <> "\" Then path = path & "\"
' Search for subdirectories.
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(path & "*", WFD) '<------ el * es un comodin y buscara TODO igual busca archivos Zip sustituyendo el * por *.zip y de igual forma lo que sea tu desides ok espefimenta ja
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
' Ignore the current and encompassing directories.
If (DirName <> ".") And (DirName <> "..") Then
' Check for directory with bitwise comparison.
If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
Loop
Cont = FindClose(hSearch)
End If
' Walk through this directory and sum file sizes.
hSearch = FindFirstFile(path & SearchStr, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
FileCount = FileCount + 1
List1.AddItem path & FileName
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
Wend
Cont = FindClose(hSearch)
End If
' If there are sub-directories...
If nDir > 0 Then
' Recursively walk into them...
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
Next i
End If
End Function
Sub Command1_Click()
Dim SearchPath As String, FindStr As String
Dim FileSize As Long
Dim NumFiles As Integer, NumDirs As Integer
Screen.MousePointer = vbHourglass
List1.Clear
SearchPath = Text1.Text
FindStr = Text2.Text
FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
Screen.MousePointer = vbDefault
End Sub