Reducir o eliminar comandos de un formulario

Tengo el formulario de la imagen. Con tres tipos de búsqueda, según seleccione una u otra me muestra el comando correspondiente (los comandos están ocultos) y me realiza una búsqueda de unos datos entre dos fecha, mostrándome los datos en el formulario. En cada uno de los comandos tengo las siguientes instrucciones, es mas extensa pero pongo solo un poco, para no hacerlo muy extenso:

Private Sub cmdverañoactual_Click()

'Compruebas que haya una fecha inicial y final

If IsNull(Me.txtfi) Then

    MsgBox "Tienes que seleccionar una fecha inicial", vbOKOnly + vbInformation, "SIN FECHA"

   Me.txtfi.SetFocus

    Exit Sub

End If

If IsNull(Me.txtff) Then

    MsgBox "Tienes que seleccionar una fecha final", vbOKOnly + vbInformation, "SIN FECHA"

   Me.txtff.SetFocus

    Exit Sub

End If

If txtff < txtfi Then

MsgBox " La fecha final no puede ser menor que la inicial", vbExclamation, "Error"

Exit Sub

End If

'Turnos1,2,3,

txtTurno1 = DCount("TURNO", "TAltas", "Fecha Between Forms!FEstadistica!txtfi.value and Forms!FEstadistica!txtff.value and [TURNO] = '1'")

txtTotalturnos = txtTurno1 + txtTurno2 + txtTurno3

….

Todo esto me funciona bien. Lo quiero es tener un solo comando, es decir que no tuviera los tres comandos sino que con uno solo me hiciera lo mismo. Para eso he insertado un grupo de opciones.

Al activar una opcion me muestra el comando y para eso he usado la instrucción select case,

Select Case Me.Marco163

Case 1

Comando172.Visible = True

Comando172.Caption = "Historico I"

Comando172.ForeColor = 1671168

Case2

Comando172.Visible = True

Comando172.Caption = "Historico II"

Comando172.ForeColor = 1671168

Case 3

Comando172.Visible = True

Comando172.Caption = "Año Actual"

Comando172.ForeColor = 1671168

La instrucción que puse al principio va en cada uno de los Case, no la pongo para no hacerlo muy extenso.

Ahora lo que me ocurres es que por ejemplo, si selecciono Año actual, me muestra el comando, inserto la fecha de búsqueda y al pulsar el comando no me muestra los datos, tengo que desmarcar Año actual y al volverlo a marcar, sorpresa me realiza la búsqueda.

Me podríais ayudar u orientar si estoy usando la opción correcta o existe alguna otra opción menos complicada para aplicar.

1 respuesta

Respuesta
2

Antonio, tus razones tendrás para hacerlo así. En este caso, si funciona

Cuando Pulso el botón

En el caso de seleccionar Histórico 1

Etc. Pero, es mi opinión que no tiene porque ser acertada, si vas a marcar una casilla ¿para qué quieres los botones?. Yo lo quitaría, y simplemente pondría el marco y los combinados(y estos últimos, psch, psch). En el evento al recibir el enfoque del combinado Fini pondría

Private Sub FIni_GotFocus()
Select Case Marco4
Case 1
FIni.RowSource = "select fecha from copia where year([fecha])<year(date())group by fecha"
Case Is = 2
No sé lo que tendría que hacer
Case Else
FIni.RowSource = "select fecha from copia where year([fecha])=year(date()) group by fecha"
End Select
End Sub

Es decir, que al recibir el enfoque, si en el marco 4 está marcado el 1, el origen de la fila sean aquellas fechas de la tabla Copia en que su año sea menor que el año del sistema.

Como no se que debe hacer en Histórico 2 lo obvio

O si esta marcado el Año actual, el origen de la fila sean aquellas fechas de la tabla Copia en que el año del campo Fecha sea igual al año del sistema( está en la imagen 1)

Lo mismo en FFin. Luego, si quieres, en el evento Antes de actualizar del combinado FFin le pones lo de que te avise si hay algo no marcado para poder corregirlo. Y en el evento Después de actualizar de este mismo combinado le puedes poner lo de

me"nombredelsubform.form.recordsource" select * from copia where fecha between...

Porque no llega a este evento si antes encuentra algún problema en el evento Antes de actualizar.

Por cierto, no hace falta lo de Fini. Value, basta con Fini. Si no le dices nada en contra Access, supone que te refieres a su valor.

¡Gracias! 

Me acabo de dar cuenta, puse mal la instrucción

me.nombredelsubform.form.recordsource=" select * from copia where fecha between..."

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas