Cuando necesitamos trabajar con directorios que pueden ser ubicados (en paquete) en otra ubicación, nos será útil contar con un programita que utilice el objeto FileSystemObject.
Veremos el uso del método GetFolder para obtener el contenido de una carpeta, las propiedades SubFolder y Files para hacer referencia a la colección de subcarpetas y archivos respectivamente.
En el ejemplo, contaré con un control desplegable (ComboBox1) para presentar las primeras carpetas a recorrer. Asumo que estarán en la misma ubicación del libro activo.
Luego tendremos un segundo control desplegable (ComboBox2) que nos mostrará las subcarpetas de la carpeta seleccionada en el primer control.
Y así podemos seguir con otras ubicaciones hasta encontrar la carpeta que contenga los archivos que buscamos. En este caso, la selección del segundo control ya nos devolverá en una lista (ListBox1) el total de archivos allí encontrados.
A continuación solo resta desarrollar la acción que realizaremos sobre esa lista. Imprimir todos, seleccionar 2 o más archivos para eliminarlos, moverlos a otra ubicación, etc.
Los códigos desarrollados en el libro que se adjunta en esta entrada (ver descarga al pie) son los siguientes.
Dim ruta As String 'ruta de las carpetas Entradas y Salidas
Private Sub UserForm_Initialize()
ComboBox1.AddItem "ENTRADAS"
ComboBox1.AddItem "SALIDAS"
End Sub
Private Sub ComboBox1_Change() 'listar subcarpetas en el 2do combobox
Dim fs As Object, carpeta As Object, subcarpeta As Object
'la ruta de la carpeta principal es la del libro
activo
ruta =
ThisWorkbook.Path & "\" & ComboBox1.Text
'contempla posible error de ruta no hallada
On Error
GoTo sinRuta
'se crea la referencia al objeto Filesystem
Set fs =
CreateObject("Scripting.FileSystemObject")
Set carpeta
= fs.GetFolder(ruta)
'se agregan las subcarpetas al 2do combobox
ComboBox2.Clear
For Each subcarpeta In carpeta.SubFolders
ComboBox2.AddItem subcarpeta.Name
Next
Exit Sub
sinRuta:
MsgBox
"No se encontraron carpetas en la ruta indicada."
End Sub
Private Sub ComboBox2_Change() 'listar los archivos de la subcarpeta seleccionada
Dim Archi 'guarda el nombre de cada
archivo encontrado
Dim Dire As String 'guarda el directorio a revisar
'la ruta de la subcarpeta
Dire = ruta & "\" & ComboBox2.Text
'con el objeto Filesystem y con los objetos encontrados en la subcarpeta
On Error GoTo sinRuta
With
CreateObject("Scripting.FileSystemObject")
With
.GetFolder(Dire)
'se recorre
el conjunto de archivos encontrados
ListBox1.Clear
For Each
Archi In .Files
ListBox1.AddItem Archi.Name
Next
End With
End With
Exit Sub
sinRuta:
MsgBox
"No se encontró la ruta de la subcarpeta."
End Sub
Private Sub ListBox1_Click()
If ListBox1.ListIndex < 0 Then Exit Sub
MsgBox "Has seleccionado el archivo " &
ListBox1.List(ListBox1.ListIndex)
End Sub
Private Sub CommandButton1_Click() 'botón para limpiar controles y volver a empezar
ComboBox1.ListIndex = -1: ComboBox1.SetFocus
ListBox1.Clear: ComboBox2.Clear
End Sub
No hay comentarios.:
Publicar un comentario