Filtro por fechas en formulario Access (VBA)

Hola a todos. Antes de nada quisiera dar las gracias a cualquiera que pudiese ayudarme.

Tengo un filtro acumulativo creado en VBA en un formulario de Access, todos los campos filtran correctamente menos el de fecha, que no sé por qué no funciona.

El formulario tiene una pinta tal que así:

En la parte baja, al meter cualquier dato en los campos de filtrado y hacer clic en el botón de filtro, solo muestra los registro que coinciden con los valores de los campos (si todos los campos están vacíos muestra todos los registros). Pero como digo con fechas no funciona.

De entrada lo he intentado solo con el campo "Fecha I", de modo que al poner una fecha solo muestre los registros que coinciden, pero es que ni eso consigo :-(

Lo ideal sería que pudiese poner una "Fecha I" (Fecha Inicio) y "Fecha F" (Fecha Fin) y que mostrase solo los registros con fechas de incidencia (no Fecha Resolución, que no influye para nada aquí) comprendidas entre esos dos valores.

Por ejemplo, que al poner en los campos "Fecha I" el 1-1-14 y en "Fecha F" 31-1-14 solo mostrase los registros cuya "Fecha Incidencia" estuviese comprendida entre esos dos valores.

Pongo aquí dos capturas de cómo tengo el código ahora mismo y cuelgo también el archivo. Luego tendré que repetir la operación en otros formularios, pero teniendo el código correctamente lo demás solo será cambiar el nombre de los combos y cuadros de texto.

Como decía un millón de gracias a cualquier que me pueda echar un cable con esto.

Y aquí el archivo, el formulario es PENDIENTES_MACRO

https://dl.dropboxusercontent.com/u/9030591/Help%20Desk%20-%20BETA%200.511.rar

1 Respuesta

Respuesta
1

A ver si así te sirve:

Private Sub cmdFiltro_Click()
'Neckkito -- 13/01/13
 'Declaramos las variables
 Dim vAgente As Integer
 Dim vRuta As String
 Dim vDelegacion As Integer
 Dim vEstatus As String
 Dim vLargo As Integer
 Dim vFechaIni As Date, vFechaFin As Date
 Dim miFiltro As String
 'Cogemos los valores que hayamos seleccionado como filtro
 vAgente = Nz(Me.cboAgente2.Value, -1)
 vRuta = Nz(Me.cboRuta.Value, "")
 vDelegacion = Nz(Me.Cuadro_combinado96.Value, -1)
 vEstatus = Nz(Me.Cuadro_combinado100.Value, "")
 vFechaIni = Nz(Me.Texto107.Value, -1)
 vFechaFin = Nz(Me.Texto109.Value, -1)
 'Inicilizamos el filtro
 miFiltro = ""
 'Creamos la primera parte del filtro
 If vAgente <> -1 Then
 miFiltro = "AND [Agente]=" & vAgente
 End If
 'Creamos la segunda parte del filtro
 If vRuta <> "" Then
 miFiltro = miFiltro & " AND [Ruta]='" & vRuta & "'"
 End If
 'Creamos la tercera parte del filtro
 If vDelegacion <> -1 Then
 miFiltro = miFiltro & " AND [Delegacion]=" & vDelegacion
 End If
 'Creamos la cuarta parte del filtro
 If vEstatus <> "" Then
 miFiltro = miFiltro & " AND [Estatus]='" & vEstatus & "'"
 End If
 'Creamos la quinta parte del filtro
 If vFechaIni <> -1 Then
 miFiltro = miFiltro & " AND [Fecha]>=#" & vFechaIni & "#"
 End If
 'Creamos la sexta parte del filtro
 If vFechaFin <> -1 Then
 miFiltro = miFiltro & " AND [Fecha]<=#" & vFechaFin & "#"
 End If
 'Ahora cogemos la longitud del filtro
 vLargo = Len(miFiltro)
 'Recomponemos el filtro eliminando el primer 'AND '
 If vLargo > 0 Then
 miFiltro = Right(miFiltro, vLargo - 5)
 End If
 'Aplicamos el filtro al formulario
 Me.Filter = miFiltro
 Me.FilterOn = True
End Sub

No, no funciona :-(

¿Tiene algo que ver la parte de "miFiltro = Right(miFiltro, vLargo - 5)"?

He probado a ponerlo en 6 y tampoco funciona. Lo que más me extraña es que ahora no filtra por ningún campo, ni por fecha ni por los otros ¿?¿?

Muchísimas gracias por tu ayuda.

A ver ahora:

Private Sub cmdFiltro_Click()
'Neckkito -- 13/01/13
 'Declaramos las variables
 Dim vAgente As Integer
 Dim vRuta As String
 Dim vDelegacion As Integer
 Dim vEstatus As String
 Dim vLargo As Integer
 Dim vFechaIni As Date, vFechaFin As Date
 Dim miFiltro As String
 'Cogemos los valores que hayamos seleccionado como filtro
 vAgente = Nz(Me.cboAgente2.Value, -1)
 vRuta = Nz(Me.cboRuta.Value, "")
 vDelegacion = Nz(Me.Cuadro_combinado96.Value, -1)
 vEstatus = Nz(Me.Cuadro_combinado100.Value, "")
 vFechaIni = Nz(Me.Texto107.Value, -1)
 vFechaFin = Nz(Me.Texto109.Value, -1)
 'Inicilizamos el filtro
 miFiltro = ""
 'Creamos la primera parte del filtro
 If vAgente <> -1 Then
 miFiltro = " AND [Agente]=" & vAgente
 End If
 'Creamos la segunda parte del filtro
 If vRuta <> "" Then
 miFiltro = miFiltro & " AND [Ruta]='" & vRuta & "'"
 End If
 'Creamos la tercera parte del filtro
 If vDelegacion <> -1 Then
 miFiltro = miFiltro & " AND [Delegacion]=" & vDelegacion
 End If
 'Creamos la cuarta parte del filtro
 If vEstatus <> "" Then
 miFiltro = miFiltro & " AND [Estatus]='" & vEstatus & "'"
 End If
 'Creamos la quinta parte del filtro
 If vFechaIni <> -1 Then
 miFiltro = miFiltro & " AND [Fecha]>=#" & Format(vFechaIni, "mm/dd/yyyy") & "#"
 End If
 'Creamos la sexta parte del filtro
 If vFechaFin <> -1 Then
 miFiltro = miFiltro & " AND [Fecha]<=#" & Format(vFechaIni, "mm/dd/yyyy") & "#"
 End If
 'Ahora cogemos la longitud del filtro
 vLargo = Len(miFiltro)
 'Recomponemos el filtro eliminando el primer 'AND '
 If vLargo > 0 Then
 miFiltro = Right(miFiltro, vLargo - 5)
 End If
 'Aplicamos el filtro al formulario
 Me.Filter = miFiltro
 Me.FilterOn = True
End Sub

Ahora te cambio el formato de las fechas, con la función FORMAT, para ponerlas en estilo americano.

Y tenías razón, había un problemilla con el right, pero no en esa linea, sino en la primera parte del filtro, le que faltaba un espacio entre las comillas y el AND.

¡Fantástico! ¡Genial! ¡Maravilloso! ¡Funciona a la perfección!

No iba el filtro de las fechas (cuando ponías rangos entre Fecha I y Fecha F pero enseguida vi que en el código, en los IF de las fechas, ponía FechaIni en los dos, en vez de FechaFin en el segundo, lo he cambiado y voila!!!

Eres un crack, un millón de gracias, me has salvado la vida ^^

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas