Buscar valor en subformulario para operar con él en formulario

Tengo un formulario PERSONAS en el que registro diferentes datos, entre ellos el campo FECHAALTA.
En un subformulario registro FASES mediante los campos FECHAFASE y FASE.

La cuestión es que en el formulario PERSONAS quiero añadir un campo que me indique cuanto días han pasado desde la FECHAALTA y la fecha actual, pero que DEJE DE CONTAR (tome como referente la FECHAFASE) cuando el campo FASE = "CERRADO".

Para ello he creado un campo en el formulario PERSONAS y he introducido la siguiente formula:

=SiInm([FASES].[Formulario]![Fase]="CERRADO";[FECHAFASE]-[FECHAALTA];Fecha()-[FECHAALTA])

Hasta aquí bién; el problema surge cuando excepcionalmente se da una fase más después de "CERRADO"; para controlar donde ha ido un expediente, después de cerrarlo se pueden añadir las fases "ASEGURADORA" o "DIRECCIÓN", pero en estos casos la formula sigue calculando, y necessito que deje de contar si antes ya he indicado "CERRADO".

He probado dos cosas, SIN ÉXITO:

- Modificar la formula: =SiInm([FASES].[Formulario]![Fase]="CERRADO" o "ASEGURADORA" O "DIRECCIÓN";[FECHAFASE]-[FECHAALTA];Fecha()-[FECHAALTA]); el problema es que me coge la fecha de la última fase que registro y no la fecha en que se cierra.

- He creado un campo en el formulario PERSONAS para que coja desde el subformulario FASES la fecha en que se ha indicado "CERRADO":

=SiInm([FASES].[Formulario]![Fases]="CERRADO";[Fases].[Formulario]![FECHAFASE];0)

Con la idea de hacer la resta posteriorment, pero esto no sirve cuando se añaden nuevas fases.

Estoy encallado! ¿Una ayuda?

2 respuestas

Respuesta
2

Que no te funcione la primera expresión Siinm es lógico. Le estás diciendo que si es Cerrado haga esto y que si no lo es (caso de aseguradora o dirección) haga lo otro.

En tu caso yo usaría la instrucción Select Case

Select case Fases.form!fase

case is= "cerrado"

nombrecuadronuevo=....

case is="aseguradora"

nombrecuadronuevo=......

case is="dirección"

nombrecuadronuevo=.......

end select

Ok, lo que quiero es que haga lo mismo en todos los casos, es decir que cuente los días transcurridos desde el momento en que en fase se haya indicado CERRADO, independientemente que posterior a esta fase haya otra (ASEGURADORA o DIRECCIÓN).

Pero, dónde pongo la instrucción SELECT CASE? Nunca la he usado y no sé como completarla...

La instrucción puedes ponerla en cualquier evento. Como no sé el funcionamiento de tu base, para darte una idea, supongamos que el cuadro de texto del formulario donde quieres que te aparezca el valor se llama Bartoldu. En sus propiedades-eventos-al recibir el enfoque con el generador de código crea un procedimiento de evento y entre Private Sub y End Sub escribe

Select case Fases.form!fase

case is= "cerrado"

Bartoldu=fases.form!fechafase-fechaalta

case is="aseguradora"

bartoldu=lo que quieres que haga en caso de que sea ese valor

case is="dirección"

bartoldu=lo mismo

end select

Pero:

1º Si lo que quieres es que te ponga los días tendrías que usar Datediff("d", fase.form! Fechafase","fechaalta")

2º Ese evento te marca la diferencia del registro activo del subformulario. Por lo que si quieres ver el valor del segundo registro del subformulario, tendrías que hacer clic en él y luego hacer clic en el cuadro de texto Bartoldu.

Respuesta
2

Prueba con esta expresión, a ver si te complica menos la vida:

=SiInm([FASES].[Formulario]![Fase]="CERRADO" O [FASES].[Formulario]![Fase]= "ASEGURADORA" O [FASES].[Formulario]![Fase]="DIRECCIÓN";[FECHAFASE]-[FECHAALTA];Fecha()-[FECHAALTA])

Un saludo.


¡Gracias! 

Al final lo he resuelto incorporando un control al formulario que llama la fecha de cierre del subformulario y luego usando SiInm (sin tener que accedir al subformulario).

Saludos y gracias por la buena predisposición.

Feliz 2017

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas