Access - Rererir campos en un Subformulario desde un Fornulario usando Código VBA

 
Vista:
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés (22 intervenciones) el 16/12/2021 03:07:26
Hola:

Tengo un Formulario con un Subformulario. El Formulario principal contiene 3 campos denominados Factura1, Factura2 y Factura3. Y el Subformulario contiene tres campos denominados Entrega1, Entrega2 y Entrega3.

El objetivo es que cuando se escribe algún número de Factura1 deseo bloquear desde Código correspondiente al Formulario Principal los campos Factura2 y Factura3, así como las columnas Entrega2 y Entrega3 del Subformulario, y dejar Habilitado el Campo Entrega1 para poder capturar el ingreso de datos.

En el anexo les proporciono copia del Formulario y el Subformulario.

Mi duda es, ¿cómo puedo referirme a los Campos desde el Código del Formulario Principal? Lo he intentado de la forma siguiente, pero me envia un mensaje de error:

Fact1.Enabled = True
Fact1.SetFocus
Fact2.Enabled = False
Fact3.Enabled = False
[FDetalleIngMatPorFactura].[Formulario]![Entrega1].SetFocus = True
[FDetalleIngMatPorFactura].[Formulario]![Entrega2].SetFocus = False
[ FDetalleIngMatPorFactura].[Formulario]![Entrega3].SetFocus = False

Estas líneas se encuentran el un Procedimiento denominado Form_Current del Formulario Principal, las líneas que me marcan error son las 3 últimas.

Les agradezco su atención y ayuda.

Saludos desde México.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Anonimo (3316 intervenciones) el 16/12/2021 19:44:53
Yo le facilitaría el trabajo a Access dándole información mas concreta, le indicaría con 'Me' que el campo pertenece al formulario activo.

No veo claro el proceso, me explico:

El objetivo es que cuando se escribe algún número de Factura1 deseo bloquear .....


Se comienza activando el campo factura1:

1
2
3
4
.....
Fact1.Enabled = True
Fact1.SetFocus
.....

¿Cómo se le introdujo el dato si no estaba activo?
Y si se desea utilizar el campo Factura2 o tres ¿están activos estos? ....

Como me lo plantearía:

Se parte de que es un registro nuevo , asi que el el evento 'Current' se activan todos los campos factura y desactivan los del subformulario

Si no lo fuese ... o todos bloqueados (las facturas no deberían ser modificadas) o se verifica el valor y aquellas que sean NULL se bloquean.


En usuario genera un tipo de factura (1, 2, 3) en cuanto lo confirme (después de actualizar) y si es un registro nuevo) se le envía a una subfuncion (asi le vale a factura uno, dos y tres) que haría siempre lo mismo:

1
2
3
4
5
6
7
8
9
Private Sub Actualiza()
Me.Factura1.enabled = Me.factura1 <> Null ' o la condicion adecuada
Me......  lo mismo para el dos
Me......
'En el subformulario 'lo mismo' pero referenciado a su respectivo tipo de factura´
Me.[FDetalleIngMatPorFactura].[Formulario]![Entrega1].enabled = Me.Factura1.enabled
Me..... lo mismo para el dos
Me..... lo mismo para el tres
End Sub

Y como se desea enviar el foco a algún sitio dos alternativas:
.- añadir en cada objeto el destino (son dos pasos)
Algo asi:

Me.[FDetalleIngMatPorFactura].SetFocus
Me.[Entrega1].SetFocus

.- Añadir un parámetro (por ejemplo el numero del tipo de factura o el nombre del destino) y en base a el redirigir el foco

Es una opcion que si se adapta a la necesidad solo necesitaria decisiones y una ligera afinacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés (22 intervenciones) el 16/12/2021 20:14:34
Hola:

Agradezco mucho tu amable respuesta, voya programarlo como sugieres y a hacer las pruebas correspondientes.

Saludos desde México.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Eduardo (317 intervenciones) el 16/12/2021 21:17:05
Debe habilitar los controles factura 1,2 y 3 de alguna forma, puede ser mediante un botón o en el evento Al Activar Registro. Algo como

1
2
3
4
5
Private Sub Form_Current()
  Me.factura1.Enabled = True
  Me.factura2.Enabled = True
  Me.factura3.Enabled = True
End Sub

Ahora se debe programar cada uno de los controles del formulario principal, algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub factura1_AfterUpdate()
  Me.factura2.Enabled = False
  Me.factura3.Enabled = False
End Sub
 
Private Sub factura2_AfterUpdate()
  Me.factura1.Enabled = False
  Me.factura3.Enabled = False
End Sub
 
Private Sub factura3_AfterUpdate()
  Me.factura1.Enabled = False
  Me.factura2.Enabled = False
End Sub

Y en el subformulario al entrar (programado desde el formulario principal) algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub frmSubtblfact_ppal_detalle_Enter()
  If Me.factura1.Enabled = True Then
    Me.frmSubtblfact_ppal_detalle.Form.entrega1.Enabled = True
    Me.frmSubtblfact_ppal_detalle.Form.entrega2.Enabled = False
    Me.frmSubtblfact_ppal_detalle.Form.entrega3.Enabled = False
  End If
 
  If Me.factura2.Enabled = True Then
    Me.frmSubtblfact_ppal_detalle.Form.entrega1.Enabled = False
    Me.frmSubtblfact_ppal_detalle.Form.entrega2.Enabled = True
    Me.frmSubtblfact_ppal_detalle.Form.entrega3.Enabled = False
  End If
 
  If Me.factura3.Enabled = True Then
    Me.frmSubtblfact_ppal_detalle.Form.entrega1.Enabled = False
    Me.frmSubtblfact_ppal_detalle.Form.entrega2.Enabled = False
    Me.frmSubtblfact_ppal_detalle.Form.entrega3.Enabled = True
  End If
 
End Sub

Sería gráficamente algo como:


factua1_2_3

Observe que ingresé el valor 4,200 en el control factura2, entonces se bloquean las columnas entrega1 y entrega3 del subformulario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Anonimo (3316 intervenciones) el 16/12/2021 21:43:30
La subfunción evita la reiteración y añade una enorme ventaja:
.- si se desea cambiar algo se hace en un único lugar (menos cambios = menos errores y de haberlos, mas facilidad para localizarlo)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés García (22 intervenciones) el 17/12/2021 02:33:45
Agradezco mucho tu gentil respuesta. Voy a reescribir el código y a probarlo. En cuanto concluya te emito los resultados.

Saludos desde la Ciudad de Querétaro, México.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés (22 intervenciones) el 17/12/2021 03:32:36
Hola de nuevo Eduardo:

Muchas gracias por tu valiosa ayuda, funcionó de maravilla. Tenía 20 años que no programaba en VBAccess y olvidé muchos detalles.

Te envío saludos desde la Ciudad de Querétaro, México.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Eduardo (317 intervenciones) el 17/12/2021 14:32:38
Me alegro le haya servido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés (22 intervenciones) el 17/12/2021 16:46:51
Muchas gracias Eduardo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Mario Andrés (22 intervenciones) el 16/12/2021 22:16:49
Hola de nuevo:

Escribí en el Código de la Subrrutina Form_Current el texto siguiente:

1. If (Fact1 = "") And (Fact2 = "") And (Fact3 = "") Then
2. MsgBox "Se cumple la Condición 1, Entrando al Módulo Principal"
3. Fact1.Enabled = True
4. Fact1.SetFocus
5. Fact2.Enabled = False
6. Fact3.Enabled = False
7. Me.[FDetalleIngMatPorFact].[Formulario]![Entrega1].Enabled = True
8. Me.[FDetalleIngMatPorFact].[Formulario]![Entrega2].Enabled = False
9. Me.[FDetalleIngMatPorFact].[Formulario]![Entrega3].Enabled = False
10. ElseIf ...

Cuando abro el Formulario donde están los Campos para capturar las Facturas y el Subformulario donde están las Entregas de Productos en cada Columna, me despliega un Mensaje de error que indica: "El Objeto no admite esta propiedad o Método", y resalta con color verde la línea 7.

Les agradeceré su atención y ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rererir campos en un Subformulario desde un Fornulario usando Código VBA

Publicado por Anonimo (3316 intervenciones) el 17/12/2021 00:52:58
Modifica la línea y escríbela en ingles, o no entenderá que 'Formulario' es el subformulario:

1
2
3
4
'Incorrecta
7. Me.[FDetalleIngMatPorFact].[Formulario]![Entrega1].Enabled = True
' Correcta
7. Me.[FDetalleIngMatPorFact].Form![Entrega1].Enabled = True

He tomado como base los datos que has publicado y en el contexto actual no eran los adecuados

La forma de saber con seguridad que el registro es un nuevo registro (es 'virgen') es preguntárselo:

1
IF Me.NewRecord Then ......


He partido del supuesto de que hay tres tipos de facturación a elegir (contados, clientes con cuenta y clientes vip por ejemplo), que se inicia la factura cumplimentando uno de los campos y bloqueando (para evitar errores) los que no se utilicen.

Si el entorno real tiene otras características el método puede necesitar otro enfoque
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar