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
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.
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
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!
- Compartir 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.
- Compartir respuesta