Estuve trabajando en un proyecto donde estaba implementando el desove de formularios para que mi cliente pueda ver al menos dos registros diferentes usando dos formularios idénticos, uno de los formularios reales y el otro una versión generada de sí mismo (un tema que he discutido en mis reuniones de SQL Server con Access, haga clic para unirse a la lista de anuncios). Debido a que el desarrollador anterior no utilizó el spawning de formularios, tuve que buscar todas las instancias en el origen de control de todos los formularios para identificar referencias al formulario original y reemplazarlo con TempVars.

El proyecto tiene docenas de formularios y miles de controles, así que creé el siguiente código para escanear todas las fuentes de registros de formularios para la fuente de la fila infractora y también la fuente de control de todos los controles en el formulario.

Public Sub ScanForms()
On Error Resume Next
Dim obj As AccessObject, dbs As Object
Dim ctrl As Control
Dim strRowsource As String
 
Set dbs = Application.CurrentProject
 
For Each obj In dbs.AllForms
 'Debug.Print "Working on: " & obj.Name
 DoCmd.OpenForm obj.Name, acDesign
 strRowsource = Forms(obj.Name).RecordSource
 If Err.Number Then
    strRowsource = vbNullString
 End If
 If Len(strRowsource) Then
    If InStr(1, strRowsource, "frmPatientProcessing") > 0 Then
       Debug.Print "Form: " & obj.Name
    End If
 End If
 For Each ctrl In Forms(obj.Name).Controls
     On Error Resume Next
     strRowsource = ctrl.ControlSource
     If Err.Number Then
        strRowsource = vbNullString
     End If
     On Error GoTo 0
     If Len(strRowsource) Then
        If InStr(1, strRowsource, "frmPatientProcessing") > 0 Then
            Debug.Print "Form: " & obj.Name & " Control:" & ctrl.Name
        End If
     End If
 Next ctrl
 DoCmd.Close acForm, obj.Name
Next obj
End Sub