Filtrar formulario con el valor de un cuadro combinado

Soy un aficionado a Access, ya que solo lo uso en mi trabajo.

A partir de una tabla que contiene el nombre del cliente, el año de ingreso y el año de baja, quería pedirles ayuda para poder obtener un listado de clientes vigentes en un determinado año.

De esta manera, para el año 2010 deberían listarse los clientes cuyo año de ingreso sea menor o igual al 2010... Y que no tengan año de baja o que éste sea posterior al 2010.

Siguiendo el ejemplo del año 2010, el listado sería algo así:

Nombre: Juan / Ingreso: 2007 / Baja: - 
Nombre: Pedro / Ingreso: 2009 / Baja: 2014
Nombre : Laura / Ingreso: 2010 / Baja: 2011

Cuento con un formulario que tiene un cuadro combinado para seleccionar el año a consultar y un subformulario que muestra los clientes vigentes a ese año.

1 respuesta

Respuesta
1

Lucas, no se por qué no utiliza su nombre, pero bueno la idea es dar respuesta a su pregunta. Lo hago con una tabla, un formulario y un subformulario.

TABLA TBLCLIENTES

FORMULARIO Y SUBFORMULARIO

Selecciono el año 2010 y obtengo como muestra la imagen. Ahora cambio al año  2012

Ahora, selecciono el año 2022

Obtengo este mensaje, toda vez que el año actual es 2021.

CÓDIGO DEL EVENTO AL ABRIR EL FORMULARIO PRINCIPAL

Private Sub Form_Open(Cancel As Integer)
  Dim x As Integer
  For x = 2000 To Year(Date) + 1
     Me.cboPeriodo.AddItem (x)
  Next x
End Sub

Permite llenar el cuadro combinado desde al año 2000 hasta el  año actual más 1.

CÓDIGO DEL EVENTO DESPUÉS DE ACTUALIZAR DEL CUARDO COMBINADO

Private Sub cboPeriodo_AfterUpdate()
  Dim strSQl As String
  If Val(Me.cboPeriodo) > Year(Date) Then
    Me.frmSubClientes.Form.Visible = False
    MsgBox "El año no puede ser superior al actual", vbInformation, "Le informo"
    Exit Sub
  End If
  Me.frmSubClientes.Form.Visible = True
  strSQl = "SELECT tblclientes.nombre" & vbCrLf
  strSQl = strSQl & "           , tblclientes.aingreso" & vbCrLf
  strSQl = strSQl & "           , tblclientes.abaja" & vbCrLf
  strSQl = strSQl & "        FROM tblclientes" & vbCrLf
  strSQl = strSQl & "       WHERE  (tblclientes.aingreso<=" & Me.cboPeriodo & ")" & vbCrLf
  strSQl = strSQl & "         AND (tblclientes.abaja Is Null  " & vbCrLf
  strSQl = strSQl & "          OR  tblclientes.abaja=0 " & vbCrLf
  strSQl = strSQl & "          OR  tblclientes.abaja >" & Me.cboPeriodo & ")" & vbCrLf
  strSQl = strSQl & "       ORDER BY  tblclientes.nombre" & ";"
  Me.frmSubClientes.Form.RecordSource = strSQl
End Sub

Hola Eduardo!

Es excelente el procedimiento. Era justo lo que necesitaba. Muchas gracias.

Si me permite una consulta más. Con respecto a la última línea del código que usted me indica:

Me.frmSubClientes.Form.RecordSource = strSQl

Si el subformulario esta dentro de una página de un control de pestañas, podría decirme cómo debería escribir la referencia al mismo?

Sigue siendo lo mismo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas