Quién sabe como trabajar el Filter con vba

Reciban todos ustedes un cordial saludo. Pasando a contar mi duda que tengo con este código en vba sobre la parte de filtros tomando en uso que uso un cuadro combinado al cual le apliqué lista de campos y también uso un cuadro de texto, donde anoto que es lo que deseo filtrar.

Pero cuando lo intento no me permite seleccionar y por tanto tampoco me permite entrar el dato bajo el cual deseo obtener mi filtro.

A través de los videos de youtube encontré un código vba de un autor extranjero que habla ingles pero pues mi inglés no es tan bueno pero le intenté entender.

Dejo una copia aquí del código que use.

Haber en donde es que falla el proceso y que alguno de ustedes me pueda orientar. Muchas gracias

Private Sub cboField_Enter()
Dim oRS As DAO.Recordset, i As Integer
If Me.Form.FilterOn = True Then
DoCmd.ShowAllRecords
Set oRS = Me.RecordsetClone
cboField.RowSourceType = "Value list"
cboField.RowSource = ""
For i = 0 To oRS.Fields.Count - 1
If oRS.Fields(i).Type = dbText Then
cboField.AddItem oRS.Fields(i).Name
End If
Next i
End If
End Sub

Private Sub txtFilter_exit(Cancel As Integer)
Dim sFilter As String, oRS As DAO.Recordset
If IsNull(cboField) Then
DoCmd.ShowAllRecords
MsgBox "seleccione un campo a filtrar", vbInformation, "Aviso TecnoAgro"
Exit Sub
End If
If IsNull(txtFilter) Then
DoCmd.ShowAllRecords: Exit Sub
'like "b*"
'like [parameter] & "*"
'"LIKE ' " & txtbox & "*'"
sFilter = cboField & "LIKE'" & txtFilter & "*'"
DoCmd.ApplyFilter , sFilter
Set oRS = Me.RecordsetClone
If oRS.RecordCount = 0 Then
MsgBox "No hubo resultados", vbInformation, "Aviso TecnoAgro"
DoCmd.ShowAllRecords
End If
End If
End Sub

1 respuesta

Respuesta
2

Sandra: Me queda un poco oscuro lo que pretendes hacer, porque me despista un poco lo de "... cuadro combinado al cual le apliqué lista de campos..". Entonces veamos si lo entiendo bien.

Tienes un Formulario con un Combo en el cual eliges "el Campo de la Tabla en el que vas a buscar", y después en un cuadro de texto pones "uel"

Si eliges en el Combo el campo Nombre quieres que te aparezcan los nombres de >> Miguel, Samuel... Si eso es así me lo confirmas por favor y seguimos. Saludos >> Jacinto

Jacinto buenas como estas, gracias por ayudarme bueno tengo lo siguiente revisando en el código todo puede estar bien, lo que pasa es que a este formulario le puse la instrrucción que dice solo lectura y luego aplique ello, no me salia porque intentaba abordarlo pero no me daba por el detalle de solo lectura.  Lo cierto es que bueno tu sabes que en el cuadro combinado cuando tenemos origen de fila y tabla consulta para hacer el despliegue de acuerdo con lo que se elige da el resultado.  Bueno yo deseo hacer un cuadro combinado en el cual se despliegue los campos de la consulta y que elija cualquiera de ellos, y cuando de un texto ocurrencia en el txtFilter me aparezca el filtro en el formulario.  Este formulario que trato es de varios elementos.  Por eso dos controles para ello uno con el nombre cboField para desplegar en este los campos de la consulta que esta registrada en el origen de control y por otra parte el txtFilter que me ayuda para recibir el dato o sea la palabra por la cual quiero buscar.  Te pongo un ejemplo.  En el cboField tengo un campo cuyo nombre es caso.  Y pretendo en el txtFilter anotar A para que en el filter o sea la consulta me salga solo que cumple con este detalle.  Espero ahora si haber podido orientarte y mil gracias amigo.  Cualquier cosa te seguiré buscando por el interno.  De todos modos espero en este espacio la respuesta.  Mil gracias.  tu amiga Sandra

Miro de prepararte un ejemplo y te cito el enlace de descarga.

Así creo que será más fácil resolver el problema. Un saludo >> Jacinto

Sandra: Te adjunto el enlace del Ejemplo que te he preparado, pensando que es lo que necesitas.

http://www.mediafire.com/file/ox5kzu1cco4d66k/BuscaTextoEnCampoElegido.rar/file 

Ya me contarás. Un saludo >> Jacinto

¡Gracias! Amigo Jacinto.  Lo veré y te comento.  

Muchas Gracias Jacinto, eso me sirvió bastante tengo como tres formas para trabajar este punto pero interesante.  Lo que hice en el otro ya cuadré y funcionó con el codigo que te mandé lo que pasa es que el autor que lo hizo se comió varias líneas y faltaba el especificar los botones como tu lo muestra en tu ejemplo o sea el de buscar y mostrar todo, esos dos no estaban.  Pero genial muchas gracias.  Ahora me encuentro trabajando con un cliente de Honduras y con este personaje en lo que me ha pedido he aprendido mas. Bendiciones y mil gracias.

Jacinto como estas, mira tu me puedes por favor ayudar con estas líneas de código

Las estoy separando de esta forma pero me dice que espera fin de la expresión.

strSQL = "SELECT CgCmlDini.txt_L0INP001, & _
& YIndicadoresADetalleGral.NombL1AAP004, & _
& CgCmlProductor.textL1AAP007, YIndicadoresADetalleGral.KEYLLAVE, & _
& CgCmlProductor.slo_L1AAP008, CgCmlProductor.Municipio, & _
& CgCmlProductor.textL1AAP010, CgCmlDini.dataL0ENP001, & _
& YIndicadoresADetalleGral.YcropIngresoNeto, & _
& YIndicadoresADetalleGral.YcropAutoconsumo, & _
& YIndicadoresADetalleGral.YcropInsumo, & _
& YIndicadoresADetalleGral.YcropTotalActividad, & _
& IndicadorCsYcropFinal.INGRESONETO, YIndicadoresADetalleGral.Ycrop & _
& FROM ((YIndicadoresADetalleGral INNER JOIN IndicadorCsYcropFinal & _
& ON YIndicadoresADetalleGral.KEYLLAVE = IndicadorCsYcropFinal.KEYLLAVE & _
& ) INNER JOIN CgCmlDini ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlDini.KEYLLAVE) & _
& INNER JOIN CgCmlProductor ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlProductor.KEYLLAVE & _
& WHERE (((YIndicadoresADetalleGral.YcropAutoconsumo)< Me.MenorVr ))";
Me.RecordSource = strSQL

Que es lo que estoy haciendo mal. Mil gracias por tu ayuda

Sandra: Sin entrar en un análisis más profundo, lo queveo es que tienes el ; (punto y coma) final después de las Comillas. Cierra la consulta con >>

.... < Me.MenorVr ));"

Y me comentas si persiste el error. Un saludo >> Jacinto

Sandra: Acabo de mirar con un poco más de detalle tu Consulta y yo la montaría así:

StrSQL = "SELECT CgCmlDini.txt_L0INP001, YIndicadoresADetalleGral.NombL1AAP004, CgCmlProductor.textL1AAP007, YIndicadoresADetalleGral.KEYLLAVE, "
StrSQL = StrSQL & "CgCmlProductor.slo_L1AAP008, CgCmlProductor.Municipio, CgCmlProductor.textL1AAP010, CgCmlDini.dataL0ENP001, "
StrSQL = StrSQL & "YIndicadoresADetalleGral.YcropIngresoNeto, YIndicadoresADetalleGral.YcropAutoconsumo,YIndicadoresADetalleGral.YcropInsumo, "
StrSQL = StrSQL & "YIndicadoresADetalleGral.YcropTotalActividad, IndicadorCsYcropFinal.INGRESONETO, YIndicadoresADetalleGral.Ycrop "
StrSQL = StrSQL & "FROM ((YIndicadoresADetalleGral INNER JOIN IndicadorCsYcropFinal ON YIndicadoresADetalleGral.KEYLLAVE = IndicadorCsYcropFinal.KEYLLAVE) "
StrSQL = StrSQL & "INNER JOIN CgCmlDini ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlDini.KEYLLAVE) "
StrSQL = StrSQL & "INNER JOIN CgCmlProductor ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlProductor.KEYLLAVE "
StrSQL = StrSQL & "WHERE YIndicadoresADetalleGral.YcropAutoconsumo < " & Me.MenorVr

Y estoy Suponiendo que MenorVr es un número. Ya me cuentas. Un saludo >> Jacinto

Amigo Jacinto gracias le aplique lo que me dices y sale pero tengo un problemita que me sale que introduzca parámetro.

Mira te mando las líneas de código que estoy usando para este procedimiento de evento. Gracias

Private Sub btnBuscarMenorVr_Click()
Dim strSQL As String
If Not IsNull(Me.MenorVr) Then
strSQL = "SELECT CgCmlDini.txt_L0INP001, " _
& "YIndicadoresADetalleGral.NombL1AAP004, " _
& "CgCmlProductor.textL1AAP007, YIndicadoresADetalleGral.KEYLLAVE, " _
& "CgCmlProductor.slo_L1AAP008, CgCmlProductor.Municipio, " _
& "CgCmlProductor.textL1AAP010, CgCmlDini.dataL0ENP001, " _
& "YIndicadoresADetalleGral.YcropIngresoNeto, " _
& "YIndicadoresADetalleGral.YcropAutoconsumo, " _
& "YIndicadoresADetalleGral.YcropInsumo, " _
& "YIndicadoresADetalleGral.YcropTotalActividad, " _
& "IndicadorCsYcropFinal.INGRESONETO, YIndicadoresADetalleGral.Ycrop " _
& "FROM ((YIndicadoresADetalleGral INNER JOIN IndicadorCsYcropFinal " _
& "ON YIndicadoresADetalleGral.KEYLLAVE = IndicadorCsYcropFinal.KEYLLAVE " _
& ") INNER JOIN CgCmlDini ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlDini.KEYLLAVE) " _
& " INNER JOIN CgCmlProductor ON YIndicadoresADetalleGral.KEYLLAVE = CgCmlProductor.KEYLLAVE " _
& " WHERE (((YIndicadoresADetalleGral.YcropAutoconsumo)< " _
& "Me.MenorVr));"
Me.RecordSource = strSQL ' ***se para aqui en esta líneas****
End If
If IsNull(Me.MenorVr) Then
MsgBox "No registro valor a buscar negativo", vbOKOnly, "Aviso TecnoAgro"
Me.MenorVr.SetFocus
End If
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox "No hubo resultado para la consulta", vbOKOnly, "Aviso TecnoAgro"
End If
End Sub

Mil gracias por tu tiempo. Luego te envío la base de datos como quedó.

Sandra:Prueba la segunda que te he enviado y si tienes problemas entonces si quieres me mandas la BD. Hasa ahora >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas