Macro para listar carpetas en combobox

---------------------

Buena tarde

Sigo molestando

Solicitando su ayuda

Como puedo listar carpetas en combobox

En el primer combobox1 aparezcan listadas dos carpetas (ENTRADAS Y SALIDAS)

Luego al seleccionar cualquiera de las dos anteriores aparezcan listadas las subcarpetas en el combobox2

Al seleccionar cualquier subcarpeta del combobox2 aparezcan en el listbox1 los archivos pdf que contiene la carpeta seleccionada.

Más o menos así

2 respuestas

Respuesta
2

Te dejo el código completo que lo estoy colocando en un Userform (también puede ser una hoja con controles ActiveX).

Ajusta el nombre de tus controles y no olvides copiar también la primera línea Dim ;)

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 PDF 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
'se crea la referencia al objeto Filesystem
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

* Adaptaciones a las macros incluídas en cap.17 (Trabajando con Directorios) del manual 500Macros.

Te invito a visitar la sección Manuales de mi sitio. Ya comenzaron las promociones de Fin de Año! Consulta por otras promociones a mis correos.

en el combobox2 no me carga nada

Entonces revisa nuevamente todo lo que te comenté. En la imagen que te envié se observa que el proceso funciona correctamente.

1- Ajusta los nombres de tus controles (ComboBox1, ComboBox2, ListBox1)

2- Copia todo el código que te envié ( no olvides la primera línea del Dim)

3- Revisa que no tengas ningún otro código para estos controles, por ahora. Ni nada en la propiedad RowSource de los combos.

4- Verificá la ruta de tus carpetas. En la macro se considera que las carpetas se ubican en la misma del libro activo.

Si tuvieses una versión de las anteriores (xls) la instrucción no sería FileSystemObject sino FileSearchSystem, como lo marqué en la imagen. Pero este no es tu caso ya que no comentaste que te haya devuelto un mensaje de error.

Te ofrezco el libro de ejemplo que podes solicitarlo a mi correo. Reemplazá los textos en mayúsculas por el caracter.

CibersoftPUNTOargARROBAgmailPUNTOcom

El corrector me modifica la dirección de correo. Debiera empezar con minúsculas, sino copia alguno de los que aparecen en sección Contactos de mi sitio.

Sdos!

hola

cuando selecciono el combobox1 Entradas me tira directo a

"No se encontraron carpetas en la ruta indicada."

porfin encontre donde esta equivocandome

ahora donde puedo colocar esto

WebBrowser1.navigate

para que me muestre el pdf despues de dar click en el archivo del listbox

porfavor, gracias

En mi respuesta anterior te dejé una macro para el evento Click del ListBox. Te la ajusté un poco porque ahora ya tendrás otra ruta.

Tendrás que declarar otra variable al inicio del módulo, para que guarde la referencia de la subcarpeta:

Dim Dire as String

Private Sub ListBox1_Click()
'x Elsamatilde
If ListBox1.ListIndex < 0 Then Exit Sub
Dim rutaPDF as String, archivo As String, ext As String
'la ruta del pdf es la del libro activo + carpeta+subcarpeta = Dire
    rutaPDF = Dire & "\"
'nombre del Pdf
    archivo = ListBox1.List(ListBox1.ListIndex, 0)
'extensión
    ext = ".pdf"
WebBrowser1.Navigate rutaPDF & archivo & ext
End Sub

me sale error

primero aqui

y luego esto

ya logre solucionar parte del problema pero ahora me aparece asi

en webbrowser no muestra el archivo pdf

---------

Aquí la consulta es cómo hacer la búsqueda de carpetas/subcarpetas/archivo.

Para el resto, de cómo abrir ese elemento seleccionado desde la lista, solo es tratar de adaptar el código que recibiste con anterioridad.

La parte del WebBrowser lo tratamos en una consulta anterior. Allí ya habías, aparentemente, ejecutado alguna de las 2 (o las 2) respuestas que recibiste de modo satisfactorio.

La macro del evento Click del Listbox es bien simple. Solo debes ajustar tus referencias. Mis macros van probadas y explicadas. Lee los comentarios y ajusta los nombres o referencias según tu libro, ruta, carpetas, objetos, etc. Esos datos son personales de cada usuario y son Uds quienes tienen que ajustarlos en los códigos que reciben.

Según las imágenes no encuentra el PDF (fijate cómo lo tenés escrito en la lista o si está ubicado donde se lo está buscando) y tampoco encuentra el objeto Web. Fijate en el nombre que aparece en el mensaje de error ( IWebBrowser2)) y el que tenés escrito en el código (WebBrowser1)

Te ofrecí mi ejemplo como guía... todavía lo tenés a tu disposición ;)

Sdos!

Bueno

Por desgracias no me funciona

Ya hice cambios en todo y aun así no funciona

No se donde me estoy equivocando

Gracias

Qué puedo hacer por tí a distancia, ¿si no me muestras nada de tu formulario?: Los nombres de tus controles, la ubicación de tu libro con respecto a las carpetas y subcarpetas, el nombre de algún elemento de la lista... nada!

Te ofrecí el ejemplo para que te guies... no escribes. Dejame un correo para que te lo envíe... nada.

Así que me voy a otra parte de este largo chat, donde manifiestas que ya está resuelta la parte de ubicar los PDF en la lista:

Ya hasta aquí, habiendo sido éste el tema de tu consulta, creo que merecería algo más que un tilde ¿? ... pero bueno, sigamos.

Si hasta el punto de llenar la lista, se te muestran correctamente los archivos, veamos cómo indicarle ahora al evento Click o DobleClick del Listbox que se te muestre en el control WebBrowser.

Tendría que saber con exactitud el nombre de tu control. Por lo que apelo a tu cuidado y atención para ajustar las siguientes líneas con la información adecuada. Para eso dejo los comentarios en cada paso.

Dim ruta As String     'ruta de las carpetas Entradas y Salidas
Dim Dire As String     'ruta de las subcarpetas
Private Sub ListBox1_Click()
If ListBox1.ListIndex < 0 Then Exit Sub
Dim rutaPDF As String, archivo As String, ext As String
'la ruta del pdf es la del libro activo + carpeta+subcarpeta = Dire
    rutaPDF = Dire & "\"
'nombre del Pdf
    archivo = ListBox1.List(ListBox1.ListIndex, 0)
'extensión
    'ext = ".pdf"
WebBrowser1.Navigate rutaPDF & archivo     'mi lista ya presenta los archivos con su extensión
End Sub
Private Sub UserForm_Initialize()
'.....
End Sub

Y aquí el resultado:

Te vuelvo a dejar el código utilizado para MI EJEMPLO, ajusta los nombres a tu modelo.

Dim ruta As String     'ruta de las carpetas Entradas y Salidas
Dim Dire As String     'ruta de las subcarpetas
Private Sub ListBox1_Click()
If ListBox1.ListIndex < 0 Then Exit Sub
Dim rutaPDF As String, archivo As String, ext As String
'la ruta del pdf es la del libro activo + carpeta+subcarpeta = Dire
    rutaPDF = Dire & "\"
'nombre del Pdf
    archivo = ListBox1.List(ListBox1.ListIndex, 0)
'extensión
    'ext = ".pdf"
WebBrowser1.Navigate rutaPDF & archivo    'mi lista ya presenta los archivos con su extensión
End Sub
Private Sub UserForm_Initialize()
'-----
End Sub

También acabo de publicar el tema del recorrido hasta encontrar los archivos en mi último video N° 68. 

No te puede fallar si sigues todas las indicaciones. Más no te puedo ayudar a distancia y sin saber cómo estás implementando esto en tu libro.

Lo próximo sería comprar un pasaje y llegarme hasta tu oficina ;)

Sdos!

lo hice descargando el archivo de su blog y tampoco

el listbox carga la lista de archivos pdf

pero cuando selecciono uno para que se muestre en el webbrowser

no lo muestra

mis disculpas por las molestias que he causado

gracias

No es molestia... me apena que no logres resolverlo y que no envías alguna imagen para poder ayudarte con el problema.

Si tomaste el ejemplo del Blog, como allí no se realiza ninguna acción con la selección de la lista (solo se muestra un mensaje), la variable Dire se declara en el evento Change del 2do Combo.

Pero en tu caso, como te solicité que la declares al inicio del userform, debes quitarla del evento Change. Colocale una comilla delante o directamente borrá la instrucción marcada.

Ahora, estando en el Editor, colocale un punto de interrupción a tu macro del ListBox1 (no dejes la del Blog que no es para tu caso). Y verifica que tengas las 2 variables declaradas solo al inicio del formulario.

Entonces, cuando ejecutes el formulario, al seleccionar un elemento de la lista se detendrá en la instrucción de amarillo.

Allí pasa el cursor por las variables para observar su valores, tanto la de la ruta como la del archivo. Y así poder determinar si el texto completo es el que necesitas. Quizás te falte o te sobre la extensión ya que no se como cargas tus archivos a la lista.

IMPORTANTE: Por favor, toma una captura de la pantalla en este punto (o una foto con el cel) para subirla aquí en caso de que no sean los valores esperados.

Pero si esta información (RutaPDF + archivo) es correcta según la ubicación de tus Pdf ya debiera mostrarte en el control.

Y no te preocupes, mi primer nombre es 'Mucha' ... a veces ;)

Sdos!

Respuesta

César, el Excel no es lo mío, pero por si te puede dar una idea. Si tengo el formulario con dos combinados, ElegirConcepto y ElegirCarpeta y un cuadro de lista

Voy a seleccionar Entrada, con lo que en el combinado ElegirCarpeta sólo me mostrará las carpetas correspondientes al concepto Entrada

Ahora selecciono una carpeta, en este caso BDASI y...

En el evento Al recibir el enfoque(tu tendrías que hacerlo con macros) del combinado ElegirCarpeta le tengo puesto

Private Sub ElegirCarpeta_GotFocus()
ElegirCarpeta.RowSource = "select idcarpeta,carpeta from carpetas where idconcepto=" & Me.ElegirConcepto & ""
End Sub

Es decir, que sólo me muestre las carpetas correspondiente al Idconcepto que acabo de elegir

Y en ese mismo combinado, en el evento Después de actualizar

Private Sub ElegirCarpeta_AfterUpdate()
Lista4.RowSource = "select archivo from archivos where idcarpeta=" & Me.ElegirCarpeta & ""
End Sub

O sea, que sólo me muestre en el cuadro de lista aquellos archivos correspondientes al Idcarpeta que acabo de elegir.

Sería como lo que se conoce vulgarmente como cuadros combinados en cascada.

Y como se hace todo eso?

Cesar, yo lo estoy haciendo en Access, ya te dije que de Excel no tengo ni idea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas