Obtener el valor de un campo de un SubFormulario pulsando un botón desde el Formulario que contiene el SubFormulario

Tengo un formulario con ciertos botones y dentro del formulario un subformulario en modo Tabla. Lo que necesito saber hacer es como: cuando pulse un botón, pueda obtener el valor del campo donde estuviese el foco antes de pulsar el botón. Es decir, si antes de pulsar el botón el foco estaba en la columna proveedor, y el valor de ese campo concreto era por ej. "ABB", poder obtener por código el valor de "ABB".

1 respuesta

Respuesta
2

Mi primera respuesta sería "no puedes", porque al pulsar el botón, el foco lo tienes ya en el botón del formulario y no en el cuadro del subformulario...

Ahora bien, podrías crear una variable pública en un módulo independiente, de tipo Variant, y en cada uno de los cuadros de texto de tu subformulario programar su evento "Al recibir enfoque" para que la variable coja el valor de ese campo (ojo, que si los vas a modificar, también lo tendrías que hacer en "después de actualizar"). Si solo vas a necesitar el contenido de un campo concreto, programa solo los eventos de ese campo.

Luego en el evento "al hacer click" del botón lees el contenido de esa variable y haces con ella lo que quieras (pasarla a un campo del formulario, operar con ella...)

Es decir:

1º/ Creas un módulo nuevo, lo llamas como quieras (por ejemplo mdlVarPub), y en él declaras una variable pública (por ejemplo miValor):

Public miValor as Variant

2º/ En cada cuadro de texto, combinado, lista... de tu subformulario, en los eventos mencionados, pasas el valor del campo a la variable:

miVariable=Me.NombreCampo

3º/ En el evento "Al hacer click" del botón del formulario:

Me.CampoDestino=miVariable

O lo que quieras hacer.

Un saludo.



También podrías cambiar la forma de trabajar y en vez del botón usar "al hacer doble click" en el control del subformulario, para o ben pasar el contenido del campo a la variable (miValor=Me.NombreCampo) o bien pasarla directamente a un control el formulario (Me.Parent.NombreCampoDestino=Me.NombreCampo)

Muchas Gracias por tu respuesta y tu tiempo!

Pensándolo mejor, lo que realmente necesito hacer es poder hacer un filtro por selección utilizando el comando RunCommand acCmdFilterBySelection. Lo que quiero es imitar lo que hace Access con el filtro por selección:

...PERO desde un botón

El problema viene cuando el formulario (que a su vez tiene el sub en modo tabla) esta dentro de otro subformulario en un Formulario Principal.

Si te he entendido bien, quieres filtrar el subformulario por el valor seleccionado en un campo del subformulario al pulsar un botón en el formulario principal.

Pues la sistemática sería parecida, pero te haría falta otra variable pública (esta vez de tipo texto) que recoja el nombre el del campo (por ejemplo miCampo, y la declararías y asignarías igual que la otra)

Luego en el botón del formulario principal haces el filtro y lo aplicas, teniendo en cuenta el tipo de dato que tenga la variable miValor:

'Creas el filtro, teniendo en cuenta el tipo de dato
If IsDate(miValor) Then  'Si es una fecha
    Me.NombreSubformulario.Form.Filter=miCampo & "=#" & miValor & "#"
ElseIf IsNumeric(miValor) Then 'Si es un número
    Me.NombreSubformulario.Form.Filter= miCampo & "=" & miValor
Else 'Si es un texto
    Me.NombreSubformulario.Form.Filter= miCampo & "='" & miValor & "'"
End If
'Aplicas el filtro
Me.NombreSubformulario.Form.FilterOn = True

Espero haber acertado con lo que quieres, y si no, me lo dices.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas