Saltar al contenido

¿Recorrer archivos en una carpeta usando VBA?

Nuestros mejores programadores agotaron sus provisiones de café, por su búsqueda noche y día por la respuesta, hasta que Eliana encontró el arreglo en Gitea así que hoy la comparte aquí.

Solución:

Dir acepta comodines, por lo que podría marcar una gran diferencia agregando el filtro para test por adelantado y evitando probar cada archivo

Sub LoopThroughFiles()
    Dim StrFile As String
    StrFile = Dir("c:testfolder*test*")
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir
    Loop
End Sub

Dir parece ser muy rápido.

Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As Variant
   file = Dir("c:testfolder")
   While (file <> "")
      If InStr(file, "test") > 0 Then
         MsgBox "found " & file
         Exit Sub
      End If
     file = Dir
  Wend
End Sub

Aquí está mi interpretación como una función en su lugar:

'#######################################################################
'# LoopThroughFiles
'# Function to Loop through files in current directory and return filenames
'# Usage: LoopThroughFiles ActiveWorkbook.Path, "txt" 'inputDirectoryToScanForFile
'# https://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba
'#######################################################################
Function LoopThroughFiles(inputDirectoryToScanForFile, filenameCriteria) As String

    Dim StrFile As String
    'Debug.Print "in LoopThroughFiles. inputDirectoryToScanForFile: ", inputDirectoryToScanForFile

    StrFile = Dir(inputDirectoryToScanForFile & "*" & filenameCriteria)
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir

    Loop

End Function

Nos puedes añadir valor a nuestra información dando tu experiencia en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *