Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Rutina para listar ficheros

Estas en el tema de Rutina para listar ficheros en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/07/2011, 03:47
 
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.
  #2 (permalink)  
Antiguo 05/07/2011, 07:41
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Rutina para listar ficheros

Más pistas...

El problema reside en el contador del Ubound... he intentado seguirlo con varios puntos de ruptura, y me surge un error tipo 13, que dice que "no coinciden los tipos"... como intepreto eso????? están mal definidas la variables????
  #3 (permalink)  
Antiguo 05/07/2011, 10:02
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Rutina para listar ficheros

Hola!
varFileList tiene algun caracer invalido, verificalo
  #4 (permalink)  
Antiguo 06/07/2011, 00:03
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Rutina para listar ficheros

Cita:
Iniciado por lokoman Ver Mensaje
Hola!
varFileList tiene algun caracer invalido, verificalo
Agradezco tu ayuda, lokoman, pero, ¿podrías ser un poco más específico? Esto de la programación no es mi fuerte...
  #5 (permalink)  
Antiguo 06/07/2011, 01:24
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Rutina para listar ficheros

Continuamos avanzado...

El problema que enontré, una vez analizado paso a paso los distintos valores que tienen las variables es que, cuando la carptea está vacía, al pasar por el IF NOT (en letra roja), por el exit que hay, sale del programa y termina. He probado a cambiar el exit poniéndole EXIT Function, pero no va. Lo que pretendo es que cuando no haya nada, continue el análisis con la función fcnGetFileList y pase a la siguiente carpeta. En lugar del comando EXIT, ¿se puede poner otra instrucción que sirva para saltar una determinada parte de código o algo así?

El varFileList da problema porque al no encontrar nada en la carpeta, toma valor falso, con lo cual el UBuond se vuelve loco y da error...
  #6 (permalink)  
Antiguo 06/07/2011, 08:24
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Rutina para listar ficheros

Existen los famosos GOTO xxx, pero no se recomiendan su uso, porque "enredan" el code...
Y si lo intentas asi:

Código vb:
Ver original
  1. Dim strFolder As String
  2. Dim varFileList As Variant
  3. Dim FSO As Object, myFile As Object
  4. Dim myResults As Variant
  5. Dim l As Long
  6.  
  7. strFolder = Workbooks(Libro_Origen).Sheets(Hoja_Activa).Range( "A" & Bucle)
  8. varFileList = fcnGetFileList(strFolder)
  9.  
  10. If IsArray(varFileList) Then
  11.  
  12. ReDim myResults(0 To UBound(varFileList) + 1, 0 To 5)
  13.  
  14. ' place make some headers in the array
  15. myResults(0, 0) = "Filename"
  16. myResults(0, 1) = "Size"
  17. myResults(0, 2) = "Created"
  18. myResults(0, 3) = "Modified"
  19. myResults(0, 4) = "Accessed"
  20. myResults(0, 5) = "Full path"
  21.  
  22. Set FSO = CreateObject("Scripting.FileSystemObject")
  23.  
  24. ' Loop through our files
  25. For l = 0 To UBound(varFileList)
  26. Set myFile = FSO.GetFile(CStr(strFolder & "\" & varFileList(l)))
  27. myResults(l + 1, 0) = CStr(varFileList(l))
  28. myResults(l + 1, 1) = myFile.Size
  29. myResults(l + 1, 2) = myFile.DateCreated
  30. myResults(l + 1, 3) = myFile.DateLastModified
  31. myResults(l + 1, 4) = myFile.DateLastAccessed
  32. myResults(l + 1, 5) = myFile.Path
  33. Next l
  34.  
  35. ' Dump these to a worksheet
  36. Application.ScreenUpdating = True
  37. fcnDumpToWorksheet myResults
  38.  
  39. END IF
  #7 (permalink)  
Antiguo 07/07/2011, 02:58
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Rutina para listar ficheros

Nop!!!!! Seguimos off!!! Sorry, pero gracias, de todos modos!!!!
  #8 (permalink)  
Antiguo 08/07/2011, 08:52
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Rutina para listar ficheros

Si el proceso es:

1-Lees de un archivo excel una ruta
2-Cargas los archivos de esta ruta en un array
3-Si no hay archivos, debes leer otra ruta del archivo excel

Debes tener un bucle para leer de 1 en 1 las rutas que tiene el archivo excel, es decir, como tienes:
Código vb:
Ver original
  1. strFolder = Workbooks(Libro_Origen).Sheets(Hoja_Activa).Range( "A" & Bucle)

La variable "BUCLE" del CODE: .Range( "A" & Bucle), quiere decir que lees de la celda A1, despues la A2, despues la A3, y asi sucesivamente. La variable "BUCLE" la debes alimentar asi: BUCLE=BUCLE + 1 dentro de un FOR o un DO fuera de la rutina o funcion:

Código vb:
Ver original
  1. PRIVATE SUB COMMAND_CLICK()
  2.    BUCLE=1
  3.  
  4.    FOR I=1 TO 1000
  5.       LLAMADA_SUBRUTINA (BUCLE)
  6.       BUCLE=BUCLE + 1
  7.    NEXT I
  8. END SUB
  9.  
  10. SUB LLAMADA_SUBRUTINA (BUCLE AS DOUBLE)
  11.    Dim strFolder As String
  12.    Dim varFileList As Variant,  myResults As Variant
  13.    Dim FSO As Object, myFile As Object
  14.    Dim l As Long
  15.  
  16.    strFolder = Workbooks(Libro_Origen).Sheets(Hoja_Activa).Range( "A" & Bucle)
  17.    varFileList = fcnGetFileList(strFolder)
  18.  
  19.    IF IsArray(varFileList) THEN
  20. '      ...
  21. '      ...
  22. '      ...
  23.      Application.ScreenUpdating = True
  24.       fcnDumpToWorksheet myResults
  25.    END IF
  26.  
  27. END SUB

Intenta a ver...

Última edición por lokoman; 08/07/2011 a las 08:59

Etiquetas: ficheros, listar, rutina
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:24.