Saltar al contenido

Búsqueda avanzada con combobox de BD para hacer informe


Recommended Posts

Estimados amigos del foro saludos cordiales luego de buscar algo parecido a lo que requiero encontre un ejemplo, al cual he tratado de adaptar y ya casi funciona.

En el archivo de ejemplo que subo no estan todas las hoja para abreviarlo,... pero alli se encuentra una hoja de BD del mes de octubre en la que se acumularan los registros solo de ese mes para cualquier año... luego de una busqueda con los combobox del formulario para reporte se muestra el resultado en el listbox, el mismo que debera mostrarse tambien en la hoja Info_Temas, ..alli es donde surge el problema pues se borra el encabezado del cuadro y ademas la informacion no se ubica en la linea luego del encabezado. 

No obstante algunos combobox  de busqueda funcionan pero otros extrañamente no lo hacen bien pese a que estan codificados iguales como los anteriores.

No encuentro la falla del codigo

Me gustaria que le puedan echar un vistazo y me puedan colaborar con este modo de bisqueda para hacer el reporte.

 

Agradezco anticipadamente vuestra colaboracion

 

BUSQUEDA avanzada BD para hacer INFORME.xlsm

Enlace a comentario
Compartir con otras webs

A ver @Visor , así para empezar ¿Cómo no quieres que se borre el encabezado si tienes esta línea en el código :huh:

ThisWorkbook.Sheets("Info_Temas").Cells.ClearContents

Segundo... esto no lo entiendo para nada. Si declaras "Fila = 1" ¿Cómo quieres que no se coloque en la que le corresponde?

Y a partir de ahí me he perdido, pero creo que con lo que te he dicho tienes suficiente. En cuanto a los combos, no sé a qué te refieres, yo lo veo bien

Enlace a comentario
Compartir con otras webs

Gracias Haplox por revisar mi problema planteado

Como lo explique de un ejemplo que mas se parecia a lo que requiero le he avanzado mucho pero alli me pierdo tambie,..

Ahora bien lo que me explicas le he cambiado asi:

Fila = 10
'ThisWorkbook.Sheets("Info_Temas").Cells.ClearContents
Mes.Rows(4).Copy: ThisWorkbook.Sheets("Info_Temas").Rows(11).PasteSpecial Paste:=xlValues


For X = 10 To Filas
   Preparar

a la variable Fila = 10 en lugar de 1 pues esta una fila mas abajo del encabezado (Fila 9) y al siguiente codigo lo he comentado, 

Al otro codigo le he colocado fila 11 en Rows

El resultado es el de la siguiente imagen:

Como verás el listbox no locarga como se debe y en la hoja no doy para que se ubiquen los datos que corresponden.

Ademas si uso dos o mas combobox para la biusqueda, se me queda.

Es decir algo esta demas o le falta pero no lo veo

 

 

 

bussCbx.PNG

Enlace a comentario
Compartir con otras webs

Hola @Visor

No revisé mucho la planilla pero me parece que es un detalle simplemente.
En el código del botón "Buscar_Click()" puedes intentar las siguientes modificaciones para ver si es lo que necesitas?
Suerte!

Creo que lo has hecho, pero por las dudas...borra o apostrofa la siguiente línea:
'ThisWorkbook.Sheets("Info_Temas").Cells.ClearContents

Modifica la siguiente línea:

'Listbox.RowSource = Range("C2:M" & Fila).Address

por ésta:

Listbox.RowSource = Range("C11:M" & Fila).Address

 

vba41537_arreglo.png

Enlace a comentario
Compartir con otras webs

Gracias Tierra_Pampa, Efectivamente mejoro el resultado, ya no se ve el espacio en el listbox.

La fila de codigo que me indicaste que cambie, influye en el encabezado, como veras inicia con la palabra "Laboratorio" pero no se carga con el dato correspondiente. Mientras que en la Hoja sigue lo mismo,..la primera fila A1 se llena de  informacion y luego se salta a partir de la fila 11 que es donde si debe llenarse, pero igualmente no se corresponde el dato con el encabezado.

la fila que me indicaste que cambie con C11 le deje asi:

Listbox.RowSource = Range("A11:M" & Fila).Address 'Encabezados en el listbox

Que lo que hace es mostrar el encabezado del Listbox al pular el boton Buscar

Enlace a comentario
Compartir con otras webs

Revisando me di cuenta la funcion del Trim, por eso, eliminé todo lo que tiene que ver con Trim y Like. 

Ahora al buscar con año lo muestra en listbox empezando con el nombre del Laboratorio y el resto que reqiero excepto las horas de entrada y salida

Carga en el LIstbox desde el inicio pero el encabezado no lo carga bien en correspondencia con el contenido

Los otros combobox no funcionan su busqueda

Aplique el cargado vinculado los combobox de manera dependiente tal como un ejemplo resuelto por Antoni, pero en mi caso no se porque no funciona el cargado

Bien en todo caso subio nuevamente el archivo para mostrar estos cambios.

Gracias por las colaboraciones al respecto

BUSQUEDA avanzada BD para hacer INFORME.xlsm

Enlace a comentario
Compartir con otras webs

Saludos

Este es otro avance,. igualmente he quitado algunos codigos innecesarios y he colocado otros que mejoran el rsultado, aun no comprendo lo de la busqueda sobre todo seleccionando "and"  o "or" pues la busqueda pretende hacer que se busque caso 1) un criterio solamente uno cualquiera;  2) uno y otro (varios) ; 3) uno u otro (talves or no sea necesario, no lo sé)

En fin el codigo original como lo dijo alguien aqui, da para perderse,..

Subo el archivo en caso de que alguien  este siguiendo el tema, y tenga sugerencias

BUSQUEDA avanzada BD para hacer INFORME V3.xlsm

Enlace a comentario
Compartir con otras webs

  • 3 weeks later...

Saludos amigos del foro

Supongo que las soluciones que se vayan teniendo es util compartirlas

Efectivamente he solucionado en gran medida el tema, sin embargo la solucion no la he logrado como lo habia planteado al inicio.

Lo he cambiado mucho al planteo inicial y para ello he usado la filtración, funciona usando cualquiera de los combobox o de varios a la vez sin tener que usar los operadores And u Or. Usualmente vemos la filtracion usando textbox pero aqui el planteo es usando combobox.

Asi que subo el archivo para que lo vean. 

No obstante, hay una falla que no logro arreglar pues luego de filtrar en la Base de datos es obvio que se debe dejar como estaba inicialmente, es decir, sin filtrar.

para ello he puesto un codigo para quitar filtro pero esto me funciona parcialmente, pues tengo datos hasta la fila 56 y al quitar el filtro, solo se quita hasta la fila 47.

Por favor alguien me podria ayudar a resolver esto??, Agradezco anticipadamente su apoyo

Haga click aquí para Descargar el archivo

Enlace a comentario
Compartir con otras webs

Gracias Gerson, he usado ese codigo y otros que tu mismo propones en otros temas, pero no funciona.

'Primer intento
Hoja6.Range("$A$4:$R$60").AutoFilter 'Field:=8
'Segundo intento
'For Each Hoja In Array("OCT")
'    If Sheets(Hoja).AutoFilterMode Then Sheets(Hoja).AutoFilterMode = 0
'Next

 

No he usado una forma de filtración como autofiltro, es otro modo de filtrar supongo que por eso no funciona.

Enlace a comentario
Compartir con otras webs

Esto seria todo

Hace 25 minutos , Visor dijo:

Hoja6.Range("$A$4:$R$60").AutoFilter

 

¿Tienes idea de lo que estas haciendo aquí??

Hace 25 minutos , Visor dijo:

'For Each Hoja In Array("OCT") ' If Sheets(Hoja).AutoFilterMode Then Sheets(Hoja).AutoFilterMode = 0 'Next

No necesitas recorrer celdas, ni nada; para desactivar el filtro, después de usarlo

Aun que esto Array("OCT") no se, que es para ti ¿hojas de libro?

 

Saludos 

Enlace a comentario
Compartir con otras webs

Hace 5 minutos , Gerson Pineda dijo:

¿Cual forma utilizas?

Saludos

Al parecer no abres el archivo subido


Hoja6.Range("A4:R" & ultimaFila).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Hoja6.Range("A1:R2"), Unique:=False

 

 

filtro.PNG

Enlace a comentario
Compartir con otras webs

Hace 17 minutos , Visor dijo:

Pues no funciona,

Mejor espero a que te animes en abrir el archivo,...:rolleyes:

Esa linea debes ponerla, justo después que ya no necesites tener filtrada la tabla

Vamos inténtalo! 

Hace 1 hora, Visor dijo:

No obstante, hay una falla que no logro arreglar pues luego de filtrar en la Base de datos es obvio que se debe dejar como estaba inicialmente, es decir, sin filtrar.

para ello he puesto un codigo para quitar filtro pero esto me funciona parcialmente, pues tengo datos hasta la fila 56 y al quitar el filtro, solo se quita hasta la fila 47.

Ojo borra cualquier linea anterior, donde intentabas quitar el filtro 

 

Saludos

Enlace a comentario
Compartir con otras webs

Hace 8 minutos , Gerson Pineda dijo:

Esa linea debes ponerla, justo después que ya no necesites tener filtrada la tabla

Asi mis esta hecho

Private Sub CmdFiltrar_Click()
Fila = Hoja6.Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
criterios
Hoja6.Range("A4:R" & Fila).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Hoja6.Range("A1:R2"), Unique:=False
cargaListbox
QuitarFiltro
Application.ScreenUpdating = True
End Sub

mejor animate en abrir el archivo,..:D

Enlace a comentario
Compartir con otras webs

Si,..

Sub QuitarFiltro()
Application.ScreenUpdating = False
Fila = Hoja6.Range("A" & Rows.Count).End(xlUp).Row
LimpiarCbx
criterios
Hoja6.Range("A4:R" & Fila).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Hoja6.Range("A1:R2"), Unique:=False
Rows.EntireRow.Hidden = False
Application.ScreenUpdating = True
End Sub

 

Enlace a comentario
Compartir con otras webs

Hace 11 minutos , Visor dijo:

Si,..

Ahí no veo esta linea

Hace 1 hora, Gerson Pineda dijo:

Puedes usar esta linea, para cualquier filtro


If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

 

Ademas esta linea no es necesaria

Hace 12 minutos , Visor dijo:

Rows.EntireRow.Hidden = False

 

Saludos 

Enlace a comentario
Compartir con otras webs

Hace 1 hora, Visor dijo:

Ok Gracias Gerson,  de ese modo no lo intenté, lo use estando la hoja filtrada, voy a quitar manualmente todas las filas ocultas y probaré todo desde el inicio tal como lo indicas.

 

Es que te repito, no veo la línea de codigo que te proporcione, y es sencillo de agregarla, ya con tu nivel de lógica en VBA, debes hacerlo, vamos avanza un poquito mas, seguro la satisfacción será tuya, no mía 

 

Saludos 

Enlace a comentario
Compartir con otras webs

Si gracias Gerson, efectivamente asi sí funcionó.

Me gustaría pedirte un último detalle al respecto, pues cuando la hoja esta vacía o el criterio que busco no existe (osea no esta el dato), la macro se me inhibe y debo cerrar el programa oblgadamente. 

Allí me faltaría un código en caso de no exitir datos

Como seria en ese caso?? ya he intentado varias cosas

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 96 ¿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

    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
    • Hola a ambos, @MarianoCruz, si con la respuesta de @Israel Cassales ya tienes resuelto el problema, perfecto. Punto final y a otra cosa. Pero piensa que tu archivo lleva vínculos externos, así que se hace difícil (prácticamente imposible) comprobar si las propuestas dadas ofrecen el resultado esperado. A tal efecto, te sugiero que vuelvas a subir otro archivo, esta vez insertando nuevas hojas que contengan los datos existentes en esos archivos externos.  Tal vez así se vea claro qué es lo que buscas conseguir, y se puedan hacer pruebas que verifiquen la bondad de el/los resultado/s. Tampoco iría mal que insertaras a mano qué resultado debe aparecer en la celda C3 en cada uno de los 3 casos: cuando se inserte 'XI', 'XL' o unos u otros números en los lugares apropiados. Así iremos totalmente sobre seguro acerca del método a emplear. Saludos,
    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
    • Hola buenas tardes. En una hoja plantilla donde realizo diferentes consultas de datos. tengo ya establecido dos formulas diferentes con función SI y buscar. estos buscan diferentes rangos de datos y recibendiferentes resultados. Cada formula varia según una palabra o numero  ejemplo si pongo Xl pone la formula 1 y si pongo cualquier numero entre 1 y 3 pone la segunda formula. Lo que necesito hacer es que si en una celda de la columna B3 pongo XL debería de considerar la formula 1 y si pusiera el numero 1 me pondría la segunda formula, dentro de la misma formula. Ya agregue la función SI($C3="Xl",Formula1.. Pero no me funciona, espero me puedan ayudar.   Muchas gracias Mariano   Formula doble si en celda existe.xlsx
  • 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.