En este momento, he observado varias metodologías para vincular formularios con otros emergentes llamados desde el formulario principal:
1. Usar directamente el nombre de los formularios y usar los campos para relacionarlos. Lo que sería una solución de bajo nivel, ya que aumenta la dependencia para su mantenimiento y disminuye la posibilidad de reutilización del código.
Esto no deja de ser la solución más rapida al hacer referencia a los formularios mediante la notación: Forms![nombreFormulario] o Forms("nombre").
2. Usar variables globales. Pasar valores al formulario que llama a otro formulario, generalmente implica establecer una variable global con el nombre del formulario que realiza la llamada.
Esta opción sería realmente una sub-opción de la primera, en donde ya empieza a ser mas reutilizable el código, disminuyendo el acoplamiento. Y ambos enfoques serían bidireccionales en el intercambio de información.
Dentro de esta opción, a veces resulta de utilidad, añadir una variable en el modulo de clase del formulario hijo, que sea instanciada con una referencia al formulario padre. De esta manera, podríamos evitar una variable global con el nombre del formulario hijo.
Código: Seleccionar todo
Option Compare Database
Dim frmPrevious As Form
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Form_Open_Err
Set frmPrevious = Screen.ActiveForm
Form_Open_Exit:
Exit Sub
Form_Open_Err:
Select Case Err.Number
Case 2475 'Si no hay ningun formulario abierto anulamos el error
Err = 0
Set frmPrevious = Nothing
Case Else
MsgBox Error$
Resume Form_Open_Exit
End Select
End Sub
Ejemplo: http://www.mediafire.com/file/seveuhys0 ... 2.mdb/file
3. Uso de OpenArgs en la llamada al formulario dependiente. Esta opción sirve para poder pasar una lista de valores (unidireccional), normalmente usando un caracter como "|", que nos permitirá realizar una extracción a una variable de tipo matriz. Por lo que se aprovecharía para pasar el nombre del formulario que realiza la llamada al formulario dependiente o cuadro de diálogo.
Ejemplo: http://www.mediafire.com/file/ptghgkax8 ... accdb/file
4. Uso de los fundamentos de POO. Sin duda, me ha parecido la mejor opción, se usa la definición de propiedades dentro del modulo de la clase formulario, para poder intercomunicar datos, apoyandose en los eventos personalizados.
Ejemplo: http://www.mediafire.com/file/p4pld64iw ... accdb/file
Otro ejemplo definiendo una propiedad que contiene una referencia al formulario que realiza la llamada, está más acoplado en código que el ejemplo anterior, y por lo tanto, no sería el más adecuado.
http://www.mediafire.com/file/f0lhkmr5z ... accdb/file
Para muchos ya sabrían de estos métodos, así que espero que para quien los desconociera les sea de utilidad. Saludos.