ComboBox que lista las sub carpetas (y archivos) de un directorio, seleccionar un item
Buenos días/tardes/noches al foro.
Espero que disfruten de esta semana santa y espero también que descansen.
Mi problema es el siguiente:
Deseo ejecutar una macro en excel para aplicaciones para vaciar el contenido de un directorio en un combobox, en dicho combobox se listaran las carpetas y los archivos que existan en ese directorio. Si al seleccionar un item en el combobox, este es una sub carpeta, esta se abrirá mostrando su contenido (como al inicio), pero si es un archivo abrirá el archivo sin importar su extensión. Para abrir el archivo he creado una rutina llamada "abrir".
Me he apoyado en una respuesta de la Sra Elsa Matilde del 13 de enero de 2012 y la he adaptado a mi propósito pero tengo problemas al cargar de nuevo el combobox con la nueva ruta.
¿Podrían ayudarme al respecto?
Anexo encontraran el link de Elsa Matilde de enero de 2012:
ComboBox con listado de carpetas
A continuación encontraran el código completo que estoy utilizando y las notas que voy dejando.
Como verán en el código solo tengo un UserForm, un ComboBox y un botón para salir.
Este es el código:
Public strArchivos As String
Public strNombreCarpeta As String
Public ruta As String
Public archivo As String
Sub AUTO_OPEN()
Load UserForm1
UserForm1.Show
End Sub
Sub abrir(archivo As String)
'con esta sub rutina se abren los archivos seleccionados sin importar su extensión
ShellExecute Application.Hwnd, "Open", archivo, _
vbNullString, _
vbNullString, _
SW_SHOWNORMAL
End Sub
Private Sub ComboBox1_Click()
'aqui añadimos la variable strNombreCarpeta lo seleccionado en el ComboBox1
strNombreCarpeta = ruta & ComboBox1.Text
archivo = strNombreCarpeta
'si lo seleccionado en el combobox1 es un texto, vuelve a cargar el combobox1
'con el contenido de la nueva ruta
'de lo contrario, llama a la rutina "abrir" para abrir el archivo sin importar su extensión
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Activate()
'por Elsamatilde en:
'http://www.todoexpertos.com/categorias/tecnologia-e-internet/software-y-aplicaciones/microsoft-excel/respuestas/onu9ao4jz3afw/combobox-con-listado-de-carpetas
'carpeta donde se hará la búsqueda - AJUSTAR
strNombreCarpeta = "C:\Users\Usuario\Downloads\Ppto\"
'guardamos la ruta inicial para luego pegarle el directorio (o el nombre del archivo)
'seleccionado en el comobobox1
ruta = strNombreCarpeta
'limpiamos el combobox1
ComboBox1.Clear
'pasamos al directorio elegido
On Error GoTo sincarpeta
ChDir strNombreCarpeta
On Error GoTo 0
'recorremos la carpeta buscando archivos de esta extensión - AJUSTAR EXTENSIÓN
strArchivos = Dir(strNombreCarpeta, 16)
'recorremos los archivos de la carpeta
Do While strArchivos <> ""
'mostramos el nombre de cada elemento encontrado si no tiene puntos
'con esta instrucción solo se ven los directorios (carpetas)
'If InStr(strArchivos, ".") = 0 Then ComboBox1.AddItem strArchivos
'con esta instrucción vemos todo (archivos y carpetas, incluye archivos . Y ..)
ComboBox1. AddItem strArchivos
'obtenemos la siguiente entrada
strArchivos = Dir()
Loop
Exit Sub
sincarpeta:
MsgBox "La carpeta seleccionada está vacia" & strNombreCarpeta, , "ERROR"
Unload Me
End Sub