Condicion de fechas en formulario acess

Sigo peleando con mi base de datos.
Quería consultarles lo siguiente.

Tengo un fomulario con varias condiciones que lo he hecho siguiendo un ejemplo que me facilito SVeinbjorn.

Todo me ha funcionado fenomenal pero quiero introducir un cuadro combiando que me filtre por meses una fecha.

Para ello he creado una tabla acuxiliar con el número de los meses (id) y el nombre del mes

Por otro lado en la consulta que vuelco al formulario he creado un campo de nombremes: NombreMes([mes];[FINEST]) para que me diga el mes

Pues bien, ¿a la hora de hacer el formulario no se que valor le tengo que dar "string"?, "¿integer"? Y no se si le tengo que enlazar con el campo de finest o el campo Nombremes

Si lo hago con valor string y lo enlazo con el campo nombremes me lanza el siguiente errror

y  me marca en amarllo     Me.FilterOn = True

Option Compare Database
Option Explicit
Private Sub cmdBorrar_Click()
    With Me
        .cbexc.Value = Null
        .CBFLEX.Value = NulL
        .CBOMES.Value = Null
        .FilterOn = False
    End With
End Sub
Private Sub cmdFiltro_Click()
    Dim vexceda As String
    Dim vflexibd As String
    Dim vFIN As Variant
    Dim vLargo As Integer
    Dim miFiltro As String
    'Cogemos los valores que hayamos seleccionado como filtro
    vexced = Nz(Me.cbexc.Value, "")
    vflexib = Nz(Me.CBFLEX.Value, "")
    vFIN = Nz(Me.CBOMES.Value, "")
        'Inicilizamos el filtro
    miFiltro = ""
        'Creamos la primera parte del filtro
     If vexced <> "" Then
        miFiltro = miFiltro & " AND [exc]='" & vexced & "'"
    End If
     If vFIN <> "" Then
        miFiltro = miFiltro & " AND [nombremes]='" & vFIN & "'"
        End If
    If vflexib <> "" Then
        miFiltro = miFiltro & " AND [flex]='" & vflexib & "'"
    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 - 4)
    End If
        'Aplicamos el filtro al formulario
    Me.Filter = miFiltro
    Me.FilterOn = True
End Sub

Y otro problema que me surge que cuando no hay fecha de fin aparace en el registro Error ¿esto se puede omitir?

1 respuesta

Respuesta
1

Depende de cual sea la columna dependiente de tu cuadro combinado, si es la que corresponde al número de mes o al nombre.

MI duda es ¿esto te funciona: nombremes: NombreMes([mes];[FINEST])? Porque la sintaxis de esa función es bastante diferente....https://support.office.com/es-es/article/funci%C3%B3n-monthname-c64bcf54-2534-45bc-acef-de80f4a959c4 

Si ya tienes el campo mes (en la tabla o en la consulta), lo más sencillo es hacer que tu combinado devuelva el número de mes (propiedad columna dependiente del cuadro combiando), y tratarlo todo en el filtro como número, así no te lías con las comillas ni con funciones:

Dim vFIN As Integer
...
vFIN=Nz(Me.CBOMES,0)
...
If vFIN<>0 Then
miFiltro=miFiltro & " AND [mes]=" & vFIN
End If

Tampoco te haría falta crear un campo Mes en una consulta, si el campo de fecha es FINEST, el filtro lo puedes hacer así:

miFiltro=miFiltro & " AND Month([FINEST])=" & vFIN

Muchísimas gracias... Funciona fenomenal pero tengo una pregunta... si quiero que también me filtre el año, ¿supongo qué tengo que hacer otro campo combinado con los años pero luego como lo puedo poner en el filtro?, ¿Sería la misma variable con dos condiciones?

En contestación a tu pregunta de si me funciona la sintaxis, laverdad es que sí, me da el nombre de elos meses con abreviatura ene, feb pero funciona

Pues sería igual, creas una nueva variable numérica, le pasas el valor y añades otro paso a ña creación del filtro con esa nueva variable .

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas