Campo de formulario con valor de otro formulario

Tengo un form "observaciones" con campo "Transacion"

Cuando lo ejecuto de "ventas" necesito que me tome el valor transacción de ventas

Cuando lo abro del formulario compras me tome el de compras

Y por ultimo lo abro de ventas diferidas y es otro form que tiene también transacción

Respuesta
1

Vamos a suponer que tengo un formulario Compras con un botón( aunque no haría falta, ya que se puede poner en cualquier otro evento)

Cuando pulso el botón

Te lo pongo en un lado para que compruebes las cantidades.

Cuando pulso el botón desde Ventas

En mi caso, en el evento Al activar el registro del formulario Observaciones, le tengo puesto

Private Sub Form_Current()
If CurrentProject.AllForms("compras").IsLoaded Then
Transaccion = Forms!compras!TotalFactura
ElseIf CurrentProject.AllForms("ventas").IsLoaded Then
Transaccion = Forms!ventas!TotalFactura
Else
Transaccion = Forms!Ventasdiferidas!TotalFactura
End If
End Sub

1 respuesta más de otro experto

Respuesta
1

Si sube una imagen tendría más aproximación.

Formulario observciones se abre de tres formas diferentes, osea

Desde vantas

Desde compras y desde ventas diferidas

Eso tres formularios tienen un campo con un valor de transacción

-----------------------------------

El formulario obseravciones tiene un campo transacciones

-----------------------------------------

Como lo abro de tres lados diferentes no puedo ponerle valor predeterminado al campo transacción de observación.

Entonces depende de donde lo abra me tome el valor de transacción de ese formulario

No es necesario verificar si el formulario esta cargado, basta con pasar como argumento el valor de la transacción, por ejemplo:

Ahora desde el formulario ventas:

Hago clic en el botón Observación.

Ahora desde el formulario compras:

Hago clic en el botón Observación:

Ahora desde el formulario ventas diferidas:

Hago clic en el botón Observación:

Este es el código del evento Al hacer clic del botón Observación:

Private Sub ctlObservacion_Click()
 DoCmd.OpenForm "frmObservacion", acNormal, , , , , Nz(Me.Transaccion)
End Sub

Así de sencillo.

Disculpe no adicioné el código del formulario frmObservacion, en éste debe incluir el siguiente código en el evento Al abrir.

Private Sub Form_Open(Cancel As Integer)
  Me.ctltransaccion = Me.OpenArgs
End Sub

Me.ctltransaccion corresponde al campo Transaccion y Me.OpengArgs es el valor pasado desde el formulario que abre a éste.

Excelente, solución perfecta

Ahora, tengo una consulta más

Este código tengo en el botón de observaiones cuando hace la acciones que necesito

Forms! Ventas.Refresh (si lo abrí desde ventas)

Forms!Compras.Refresh

basicamente refresca la pantalla de donde lo largue,

ahora necesitaria que refresque el form de donde lo ejecute

Pero quiero hacerlo general, por que se va abrir desde muchos formularios este y cada vez que lo cierre vuelve al anterior y lo refresca.

( PD lo pensé como toma la transacción en este mismo ejemplo, en un campo me tome e valor del formulario que lo disparo) y ese valor de campo seria el formulario que lo actualiza, solo que no se como pasarlo como parámetro)

Lo he modificado de esta forma:

Al hacer clic en el botón Refrescar obtengo el siguiente mensaje:

CÓDIGO DEL FORMULARIO

Dependiendo de sus necesidades puede definir este formulario como "Emergente" y/o "Modal".

Se debe definir una variable tipo Objeto a nivel del Formulario.

Option Compare Database
Option Explicit
Dim mForm As Object

En el evento Al abrir:

Private Sub Form_Open(Cancel As Integer)
  Me.ctltransaccion = Me.OpenArgs
  Set mForm = Screen.ActiveForm
  mForm.Visible = False 'Si no quiere ocultar el formulario
                        'que llama, suspenda esta linea.
  Me.lblForm.Caption = "Llamado desde el formulario : " & mForm.Name
End Sub

Observe que en la variable tipo objeto mForm almaceno el nombre del formulario que hace la apertura de éste. Igualmente, puede hacer visible o no el formulario que hace la llamada. También fijo el titulo de la etiqueta lblForm.

Código del botón Refrescar:

Private Sub btnRefrescar_Click()
    MsgBox "Me han llamado desde el formulario " & mForm.Name & vbCrLf _
    & "y lo voy refrescar", vbInformation, "Le informo..."
    mForm.Refresh
End Sub

Observe como utilizo la propiedad "Name" para obtener el nombre del objeto almacenado en la variable mForm, en este caso el formulario que hace la llamada.

Por último el evento Al Descargar:

Private Sub Form_Unload(Cancel As Integer)
  mForm.Visible = True  'Solo si en el procedimiento de apertura se incluyó
End Sub

Como puede observar se pueden hacer muchas cosas con los formularios mediante la definición y buen uso de las propiedades de los objetos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas