Pregunta a Neckkito sobre filtro múltiple en access
Estimado Neckkito: Después de la excelente respuesta que me has dado en el pasado mes de Marzo, para un trabajo de mi hija, hoy, por medio de este foro, quiero preguntarte sobre como modifico el código que pones en tu BD. "Filtro Múltiple por Formulario",
He cambiado algunos datos, así que el formulario continuo, se basa en la tabla TDatos, de tu BD, solo que el filtro lo hago por:
campo AñoServicio.......Numérico... Entero
Campo Edad ................Numérico....Entero
Continente....................Texto
El filtro lo hago de la siguiente forma:
"cboAño servicio"...........origen datos: SELECT DISTINCT TDatos.AñoServicio
Dos cuadros de texto para la edad: "txtEdadInicial" y "txtEdadFinal" Independientes)
"cboContinente"..origen datos: SELECT
DISTINCT TDatos.Continente FROM TDatos ORDER BY TDatos.Continente;
Filtro mediante el botón "cmdFiltro" con este código:
Private Sub cmdFiltro_Click()
'Neckkito -- 13/01/13
'Declaramos
las variables
<span class="scayt-misspell" data-scaytid="255" data-scayt_word="Dim">Dim</span> vAñoServicio As Variant
<span class="scayt-misspell" data-scaytid="256" data-scayt_word="Dim">Dim</span> vEdad As Variant
<span class="scayt-misspell" data-scaytid="257" data-scayt_word="Dim">Dim</span> vContinente As String
<span class="scayt-misspell" data-scaytid="258" data-scayt_word="Dim">Dim</span> vLargo As Integer
<span class="scayt-misspell" data-scaytid="259" data-scayt_word="Dim">Dim</span> miFiltro As String
'Cogemos los valores que hayamos
seleccionado como filtro
<span class="scayt-misspell" data-scaytid="261" data-scayt_word="vAñoServicio">vAñoServicio</span> =
Nz(Me.cboAñoServicio.Value, "")
vEdad =
Nz(Me.txtEdadInicial.Value, "AND" & Nz(Me.txtEdadFinal.Value,
""))
vContinente =
Nz(Me.cboContinente.Value, "")
'Inicilizamos el
filtro
<span class="scayt-misspell" data-scaytid="273" data-scayt_word="miFiltro">miFiltro</span> =
""
'Creamos la primera parte del filtro
If vAñoServicio
<> "" Then
<span class="scayt-misspell" data-scaytid="274" data-scayt_word="miFiltro">miFiltro</span> =
"AND [AñoServicio]=" & vAñoServicio & ""
End If
'Creamos la segunda parte del filtro
If vEdad <> "" Then
<span class="scayt-misspell" data-scaytid="275" data-scayt_word="miFiltro">miFiltro</span> = miFiltro & " AND [Edad]
BETWEEN " & Me.txtEdadInicial & " And " &
Me.txtEdadFinal & """"
End If
'Creamos la
cuarta parte del filtro
If vContinente <> "" Then
<span class="scayt-misspell" data-scaytid="277" data-scayt_word="miFiltro">miFiltro</span> = miFiltro & " AND
[Continente]='" & vContinente & "'"
End If
'Ahora cogemos la longitud del
filtro
vLargo =
Len(miFiltro)
'Recomponemos
el filtro eliminando el primer 'AND '
If vLargo > 0 Then
<span class="scayt-misspell" data-scaytid="280" data-scayt_word="miFiltro">miFiltro</span> = Right(miFiltro, vLargo - 4)
End If
'Aplicamos el
filtro al formulario
Me.Filter = miFiltro 'AQUI ME APARECE EL ERROR AL DEPURAR
Me.FilterOn = True¡ Me olvidaba!. Si te es posible, ponme un código en un botón que anule el filtro y limpie los campos.
Perdona la molestia,
Un saludo,
JULIO