Diferencia entre 2 conceptos

Dudas sobre Tablas, Consultas, Formularios, Informes...
JUBILADO1940
Nivel 7
Reto03
Mensajes: 296
Registrado: Jue Dic 03, 2015 9:56 pm

Diferencia entre 2 conceptos

Mensajepor JUBILADO1940 » Mié Abr 14, 2021 7:30 pm

Buenas tardes.
Yo como siempre buscándome complicaciones. Estoy confinado y no tengo otra cosa que hacer. Veamos
apli.png

He realizado una copia de mi BD para mejorarla y lo que se muestra es la pantalla de inicio de la mejora.
Como se observa los combos que están fuera del cuadro están inhabilitados con el procedimiento "limpiar" al cargar el formulario que se muestra:
Private Sub limpiar()
With Me
.ListaCdad.Enabled = False
.ListaMes.Enabled = False
.CboComunero.Enabled = False
.CboConcepto.Enabled = False
Me.listaMes = ""
Me.ListaCdad = ""
Me.CboComunero = ""
Me.CboConcepto = ""
End With
End Sub
Estos procedimientos se activan según la opción que seleccione, por ejemplo " Recibos " con el siguiente procedimiento
With Me
.ListaMes.Enabled = True
End With
Dim mimes As String
mimes = Nz(Me.ListaMes.Value, "")
If mimes = "" Then
MsgBox "Seleccione un Mes y vuelva a pulsar", vbExclamation, "AVISO"
Exit Sub
End If
DoCmd.OpenForm "FrmRecibos", acNormal
Call limpiar
Esto me produce un error en el formulario recibos ya que no me señala el mes, como se puede comprobar
apli2.png

Pues bien después de mucho trabajar he descubierto que para que me saque el mes en ese formulario, tengo desactivar Me.listames en el procedimiento limpiar que se ejecuta al final del procedimiento recibos y no encuentro cual es la causa.
Alguien podría indicarme cuál es el motivo o que error estoy cometiendo. Gracias

P.D. En este formulario el origen del registro es la TblComunidad y el origen del subformulario es la TblRecibos.
El mes lo obtengo de pestaña Datos:valor predeterminado =[Formularios]![FrmPrincipal]![ListaMes] y el año también en valor predeterminado Fncañotrab(). La Comunidad en Origen del control: =[NomCdad]
Si falta alguna aclaración más me la solicitan. Gracias

pitxiku
VIP
Reto02
Mensajes: 496
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Diferencia entre 2 conceptos

Mensajepor pitxiku » Jue Abr 15, 2021 7:26 pm

A falta de otra cosa, en el sub limpiar tienes está línea:

Me.listaMes = ""

Si le dices que borre el mes, luego ya no lo vas a tener en ningún sitio.

JUBILADO1940
Nivel 7
Reto03
Mensajes: 296
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Diferencia entre 2 conceptos

Mensajepor JUBILADO1940 » Jue Abr 15, 2021 10:50 pm

Gracias. Pero según lo que tengo hecho, no debería influir ya que al presionar el botón Recibos y elegir un mes, habilito ListaMes, defino la variable MiMes para que tome el valor de ListaMes. Si quito ListaMes del SubLimpiar no hay problema.
Crees que el procedimiento es correcto? ó hay algo que no funciona ó yo estoy equivocado.
Espero que alguien me diga si estoy o no equivocado. Es simple curiosidad. Gracias

pitxiku
VIP
Reto02
Mensajes: 496
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Diferencia entre 2 conceptos

Mensajepor pitxiku » Jue Abr 15, 2021 11:54 pm

Todo depende del orden en el que se desarrolla el código: si primero tomas el dato del mes y lo asignas a la variable MiMes, esta variable tendrá un valor válido. Pero como luego llamas a la sub Limpiar, limpias y deshabilitas ListaMes, con lo que a partir de entonces, cuando intentes asignar el nuevo valor a MiMes asignarás una cadena vacía.

Si solo quieres que una vez seleccionado el mes no se pueda modificar, deshabilítalo sin borrar su valor. Pero si quieres limpiar su valor, cada vez que lo intentes usar te encontrarás con un valor en blanco.

JUBILADO1940
Nivel 7
Reto03
Mensajes: 296
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Diferencia entre 2 conceptos

Mensajepor JUBILADO1940 » Vie Abr 16, 2021 3:17 pm

Buenos días Pitxiku. En este procedimiento
Private Sub CmdAbrirFrmRbos_Click()

1 With Me
1 .ListaMes.Enabled = True
1 End With
2 Dim mimes As String
2 mimes = Nz(Me.ListaMes.Value, "")
3 If mimes = "" Then
3 MsgBox "Seleccione un Mes y vuelva a pulsar", vbExclamation, "AVISO"
4 Exit Sub
End If
DoCmd.OpenForm "FrmRecibos", acNormal

Call limpiar

End Sub
1.- Habilito ListaMes
2.- Defino la variable mimes, para que asuma el valor introducido en listames.
3.- El MsgBox me pide seleccionar un mes y que vuelva a pulsar el botón recibos.
4.- Sale del procedimiento Sub. Creo que eso significa Exit Sub
Al salir del procedimiento ejecuta call limpiar. Yo creía que Exit Sub obviaba todo lo que está detrás e iba al principio. ¿estoy equivocado? y si no lo estoy ¿Cómo ejecuta call limpiar y no DoCmd.OpenForm?.
Perdona por la insistencia pero soy un cabezota y sigo sin verlo claro.

pitxiku
VIP
Reto02
Mensajes: 496
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Diferencia entre 2 conceptos

Mensajepor pitxiku » Vie Abr 16, 2021 5:31 pm

If mimes = "" Then
MsgBox "Seleccione un Mes y vuelva a pulsar", vbExclamation, "AVISO"
Exit Sub
End If

Si mimes tiene una cadena vacía, se entra dentro del If...End If, aparece el MsgBox y sales de la subrutina con el Exit Sub. No estás equivocado.

Lo que yo digo es qué ocurre cuando mimes tiene algo: no entras en el If...End If, y lo siguiente es: abres un formulario, y a no ser que esté definido como diálogo en sus propiedades, se ejecuta el Call limpiar y vacías los cuadros combinados.

Si mimes nunca tiene valor, es porque en otro sitio estás limpiando el cuadro combinado. Ahí ya tendrás que revisar que más código tienes, o ir colocando puntos de interrupción y ejecutar paso a paso el código para ver dónde se limpia el cuadro combinado.

JUBILADO1940
Nivel 7
Reto03
Mensajes: 296
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Diferencia entre 2 conceptos

Mensajepor JUBILADO1940 » Sab Abr 17, 2021 1:54 am

Buenas noches: Ahora lo tengo más claro, sólo una duda

"Lo que yo digo es qué ocurre cuando mimes tiene algo: no entras en el If...End If, y lo siguiente es: abres un formulario, y a no ser que esté definido como diálogo en sus propiedades, se ejecuta el Call limpiar y vacías los cuadros combinados."

Es decir, que si está definido como diálogo en sus propiedades, sólo se ejecutaría el Call limpiar al salir del formulario, ya que aquí se ejecuta antes de entrar en el formulario?
¿Qué significa "estar definido como diálogo en sus propiedades?
Efectivamente, cuando cargo el FrmPrincipal ejecuto el sub Limpiar.
Intentaré ver lo del punto de interrupción, aunque no soy muy ducho en el tema.

Gracias por tu amabilidad y tu paciencia y perdona mi torpeza.

pitxiku
VIP
Reto02
Mensajes: 496
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Diferencia entre 2 conceptos

Mensajepor pitxiku » Sab Abr 17, 2021 1:41 pm

Si el formulario es modal y emergente (o diálogo), hasta que no se cierre no se ejecutará la siguiente línea de código. Es como el MsgBox, hasta que no se cierra no se ejecuta el Exit Sub.

Propiedades de modal y emergente:
- https://support.microsoft.com/es-es/off ... 61219c6d99

Usar los argumentos de OpenForm para abrir el formulario como diálogo (parámetro Modo de ventana):
- https://docs.microsoft.com/es-es/office ... d.openform

JUBILADO1940
Nivel 7
Reto03
Mensajes: 296
Registrado: Jue Dic 03, 2015 9:56 pm

Re: Diferencia entre 2 conceptos

Mensajepor JUBILADO1940 » Sab Abr 17, 2021 9:00 pm

Muchas gracias.
Desconocía los enlaces.
Me pondré a estudiar de inmediato.


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados