Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2011, 03:47
javidelri
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Rutina para listar ficheros

Buenos días:

Escribo para ver si alguien puede ayudarme con un pequeño problema que me ha surgido en relación con el listado de unos ficheros en excel, a través del Visual Basic.

Para situaros, debo hacer que a partir de una macro, pueda listar todos los ficheros contenidos de las diferentes carpetas que conforman un directorio. Creía haberlo conseguido, pero me ha surgido un pequeño/gran inconveniente, y es que cuando el programa detecta una carpeta vacía, se detiene y sale. Lo que pretendo conseguir es que genere un nuevo excel donde me liste todos los ficheros, y si la carpeta está vacía, que la salte y continue listando el resto de archivos del rango de direcciones que le doy.

El cuerpo básico del programa que cree es el siguiente:

Dim strFolder As String
Dim varFileList As Variant
Dim FSO As Object, myFile As Object
Dim myResults As Variant
Dim l As Long
strFolder = Workbooks(Libro_Origen).Sheets(Hoja_Activa).Range( "A" & Bucle)
' Get a list of all the files in this directory.
' Note that this isn't recursive... although it could be...
varFileList = fcnGetFileList(strFolder)

If Not IsArray(varFileList) Then
MsgBox "No files found.", vbInformation
Exit Sub
End If


' Now let's get all the details for these files and place them into an array so it's quick to dump to XL.
ReDim myResults(0 To UBound(varFileList) + 1, 0 To 5)

' place make some headers in the array
myResults(0, 0) = "Filename"
myResults(0, 1) = "Size"
myResults(0, 2) = "Created"
myResults(0, 3) = "Modified"
myResults(0, 4) = "Accessed"
myResults(0, 5) = "Full path"

Set FSO = CreateObject("Scripting.FileSystemObject")

' Loop through our files
For l = 0 To UBound(varFileList)
Set myFile = FSO.GetFile(CStr(strFolder & "\" & varFileList(l)))
myResults(l + 1, 0) = CStr(varFileList(l))
myResults(l + 1, 1) = myFile.Size
myResults(l + 1, 2) = myFile.DateCreated
myResults(l + 1, 3) = myFile.DateLastModified
myResults(l + 1, 4) = myFile.DateLastAccessed
myResults(l + 1, 5) = myFile.Path
Next l

' Dump these to a worksheet
Application.ScreenUpdating = True
fcnDumpToWorksheet myResults


El problema creo que está en la definición que hago en rojo. Llevo dandole vueltas unos cuantos días, y no consigo avanzar. Agradezco cualquier tipo de ayuda.

Muchas gracias.

Un saludo.