Saltar al contenido

Gestor documental de archivos


Recommended Posts

Buenos días. He hecho una utilidad para buscar archivos filtrando por tipo de documentos y verlos en un formulario.

Parte del código lo he adaptado de otras aportaciones. En el código he dejado referencia de una de ellas.

Mi problema es que puedo ver los archivos de una carpeta, buscando que los nombres de los archivos coincidan con la palabra a buscar del textbox. por ejemplo si pongo ANTONIO ALV encontraría "Contrato ANTONIO ALVAREZ..."

Lo que ahora busco es ayuda para buscar estos archivos dentro de las subcarpetas de la carpeta seleccionada, no solo en la carpeta.

¿M podéis ayudar? Os lo agradezco.

Envío la aplicación de ejemplo. Hay dos formularios, el susodicho y otro para configurar la ruta. Y aún me queda poner algún botón más, como imprimir o enviar por correo que lo tengo medio listo.

Gracias.

Moisés.

 

Gestor Documental (v.prueba).xlsm

Enlace a comentario
Compartir con otras webs

Hace 7 horas, ikanni dijo:

Hola Piltrafilla,

Te he hecho un apaño, ya que yo cambiaría todo?, pero no hay tiempo. Te busca en todas las subcarpetas que haya en la carpeta seleccionada y la ruta se ve tambien en el listbox.

Espero te sirva.

Gestor Documental (v.prueba).xlsm 100.87 kB · 3 descargas

Gracias por el aporte, se nota la diferencia de código con el mío. 

Hay algo que no me funciona, por ejemplo si en el TextBuscar no ponía nada me aparecía en el listbox1 todos los ficheros. Con tu código me aparece solo si hay coincidencias. Y sobre las subcarpetas, busca en la primera subcarpeta pero no dentro de estas. 

No se si eso se podría solucionar...

Gracias!!

 

Enlace a comentario
Compartir con otras webs

Hola ikanni.

Primero de todo darte las gracias por tu ayuda.

Ya para rizar el rizo, le he añadido más botones y el programa ya lo doy por terminado. Solo que quiero poner alguna validación más que creo que es importante. por ejemplo, solo quiero tratar con archivos que sean PDF. Así que en el botón de cargar ListBox quiero que tenga en cuenta esto, que no cargue ningún archivo que su extensión no sea PDF. Si lo hace, como ahora, me da problemas. Por ejemplo si en la carpeta hay un .xls me lo carga igual y entonces saltan errores como es normal si lo quiero imprimir.

Por ejemplo entiendo que podría ponerse aquí, por ejemplo.

Private Sub CommandButton3_Click()
'Mostrar archivo seleccionado en PDF
cuenta = Me.ListBox1.ListCount
For i = 0 To cuenta - 1
    If Me.ListBox1.Selected(i) = True Then
     rutaPDF = LblRutaActual.Caption & "\" & Me.ListBox1.List(i)
     ActiveWorkbook.FollowHyperlink rutaPDF, , True
    Else
    End If
Next i
End Sub

Aunque creo que donde debe ir es cuando carga el listbox tanto de manera automática como al hacer clic en el botón. En la macro "Listar_archivos_en MiRuta".

¿Podrías decirme como hacerlo? No lo tengo nada claro.

PD: Por cierto el código que pones es de un nivel muy superior al que he puesto yo, creando funciones por ejemplo.

Envío el trabajo terminado a la espera de solo este detalle.

Gracias!

 

Gestor Documental (v.prueba)(3).xlsm

Enlace a comentario
Compartir con otras webs

Hace 4 horas, Pirtrafilla dijo:

Hola ikanni.

Primero de todo darte las gracias por tu ayuda.

Ya para rizar el rizo, le he añadido más botones y el programa ya lo doy por terminado. Solo que quiero poner alguna validación más que creo que es importante. por ejemplo, solo quiero tratar con archivos que sean PDF. Así que en el botón de cargar ListBox quiero que tenga en cuenta esto, que no cargue ningún archivo que su extensión no sea PDF. Si lo hace, como ahora, me da problemas. Por ejemplo si en la carpeta hay un .xls me lo carga igual y entonces saltan errores como es normal si lo quiero imprimir.

Por ejemplo entiendo que podría ponerse aquí, por ejemplo.


Private Sub CommandButton3_Click()
'Mostrar archivo seleccionado en PDF
cuenta = Me.ListBox1.ListCount
For i = 0 To cuenta - 1
    If Me.ListBox1.Selected(i) = True Then
     rutaPDF = LblRutaActual.Caption & "\" & Me.ListBox1.List(i)
     ActiveWorkbook.FollowHyperlink rutaPDF, , True
    Else
    End If
Next i
End Sub

Aunque creo que donde debe ir es cuando carga el listbox tanto de manera automática como al hacer clic en el botón. En la macro "Listar_archivos_en MiRuta".

¿Podrías decirme como hacerlo? No lo tengo nada claro.

PD: Por cierto el código que pones es de un nivel muy superior al que he puesto yo, creando funciones por ejemplo.

Envío el trabajo terminado a la espera de solo este detalle.

Gracias!

 

Gestor Documental (v.prueba)(3).xlsm 162.22 kB · 0 descargas

Hola Ikanni, he modificado esta macro, solo he puesto esto:

''''' he añadido esta linea para comprobar que los archivos fueran PDF'''''
            If Not Right(Archivo, 3) = "pdf" Then GoTo 10

No se si es muy "ortodoxo" pero parece que así funciona.

Function Listar_archivos_en(ruta As String, Completo As Boolean)
   Dim Archivo, SubCarpeta, Fila As Long, fso As New FileSystemObject, cadena As String
   With fso
      With .GetFolder(ruta)
         For Each Archivo In .Files
            ''''' he añadido esta linea para comprobar que los archivos fueran PDF'''''
            If Not Right(Archivo, 3) = "pdf" Then GoTo 10
            With Archivo
               If Cumple(.Name, TextBuscar.Value) Then
                  a = ListBox1.ListCount
                  ListBox1.AddItem
                  ListBox1.List(a, 0) = .Name
                  'ListBox1.List(a, 1) = .Path
               End If
            End With
10:
         Next
         If Completo Then
            For Each SubCarpeta In .SubFolders
               Listar_archivos_en SubCarpeta.Path, True
            Next
         End If
      End With
   End With
   Set fso = Nothing
End Function

De todos modos me sigue saltando el error cuando intento ver en el webbroser el archivo si este se encuentra en una subcarpeta. Y no averiguo el por qué.

Si puedes ayudarme!!

Gracias,

Moisés.

Enlace a comentario
Compartir con otras webs

El error ya he visto de donde viene.

Private Sub ListBox1_Click()
cuenta = Me.ListBox1.ListCount
For i = 0 To cuenta - 1
    If Me.ListBox1.Selected(i) = True Then
      mostrar = LblRutaActual.Caption & "\" & Me.ListBox1.List(i)
      MsgBox mostrar
      Me.WebBrowser1.Navigate mostrar
    Else
    End If
Next i
End Sub

He colocado un msgbox para ver que ruta muestra cuando hacemos click en el listbox. Y veo que siempre toma como ruta la carpeta principal seguida de "\" y el nombre del archivo. Eso es un error mío, porque cuando está en una subcarpeta esta no es la ruta. ¿hay manera de poner la ruta correcta?

Gracias de antemano.

 

Enlace a comentario
Compartir con otras webs

Innaki, creo que lo he solucionado. Tenía una variable global llamada rutaPDF y la he usado para guardar la ruta del Path. Antes tomaba los datos del label pero si hay subcarpetas no tiene sentido. He usado el dato que cargas en la segunda columna del listbox, el Path y lo he asignado a la variable rutaPDF.

Function Listar_archivos_en(ruta As String, Completo As Boolean)
   Dim Archivo, SubCarpeta, Fila As Long, fso As New FileSystemObject, cadena As String
   With fso
      With .GetFolder(ruta)
         For Each Archivo In .Files
            If Not Right(Archivo, 3) = "pdf" Then GoTo 10
            With Archivo
               If Cumple(.Name, TextBuscar.Value) Then
                  a = ListBox1.ListCount
                  ListBox1.AddItem
                  ListBox1.List(a, 0) = .Name
                  ListBox1.List(a, 1) = .Path
''''''''''''''''''''''''''''''''' aquí he añadido esta linea
                  rutaPDF = ListBox1.List(a, 1)
'''''''''''''''''''''''''''''''''
               End If
            End With
10:
         Next
         If Completo Then
            For Each SubCarpeta In .SubFolders
               Listar_archivos_en SubCarpeta.Path, True
            Next
         End If
      End With
   End With
   Set fso = Nothing
End Function

Así que ahora al ver el documento en el webbroser, o al imprimirlo, o al enviarlo por correo uso la ruta real del documento que es donde tu lo habías previsto en el listbox.

Espero ya no me falle nada más.

Gracias!

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 97 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola, Ya he podido, reoslverlo. Por favor dar por terminado, este tema. Muchas gracias Mariano
    • Buenas a todos, trato de transponer o pivotar el archivo que adjunto. El archivo tiene 3 columnas ( en este caso, como pueden ser más 😞 Cód.artículo, Cód.características y Valor. El objetivo es dejar como primera columna el Cód.artículo y como fila de encabezado Cód.características, y luego cruzando datos con Valor. No sé si me he explicado bien Gracias de antemano. Libro1.xlsx
    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.