Riporto tutto il codice usato.
Questo in un modulo generale
Option Compare Database
Public colForms As New Collection 'Serve per gestire le istanze
Questo nella form chiamante
Private Sub ElencoDS_DblClick(Cancel As Integer)
' Chiamo la funzione per aprire un'istanza
' Come parametri passo:
' - Nome maschera
' - Filtro
' - Etichetta per la Caption
Call OpenForm("GestioneOre", "[ID_Stampo] = " & Me.ElencoDS.Column(0), Me.ElencoDS.Column(1))
End Sub
Function OpenForm(sFormName As String, sFilter As String, sDSCode As String)
' Apre una nuova istanza
Dim frm As Form
' Apre l'istanza
Set frm = New Form_GestioneOre
' Imposta il filtro e visualizza la maschera
frm.Filter = sFilter
frm.FilterOn = True
' Modifica l'Etichetta della form
frm.Caption = "Gestione ore " & sDSCode
' La rendo visibile
frm.Visible = True
'La aggiungo alla collezione
colForms.Add Item:=frm, Key:=CStr(frm.hwnd)
Set frm = Nothing
End Function
Questo nella form chiamata
Private Sub Form_Close()
'Rimuovo l'istanza dalla raccolta colForms
Dim obj As Object 'Oggetto in colForms
Dim blnRemove As Boolean 'Segnala per rimuoverlo.
'Controllo se questa istanza è nella raccolta.
For Each obj In colForms
If obj.hwnd = Me.hwnd Then
blnRemove = True
Exit For
End If
Next
' Disassegna l'oggetto
Set obj = Nothing
' E lo rimuove dalla raccolta.
If blnRemove Then
colForms.Remove CStr(Me.hwnd)
End If
End Sub
E fino a qui funziona tutto bene.
Le maschere vengono aperte sul filtro impostato e si chiudono in modo indipendente e correttamente.
Quello che vorrei fare è rendere pubblica la OpenForm e passargli i parametri:
- Nome della maschera da aprire (String)
- Filtro (String)
- Nome dell'etichetta (String)
Come ti dicevo all'inizio, ho trovato questo codice:
Set frm = Forms(CurrentProject.AllForms(nItem).Name)
e ho pensato che si potesse passare un valore, ma non funziona.
Ho provato a cambiare la sintassi pensando che chi aveva riportato il codice avesse sbagliato qualcosa, ma non ho risolto.
Perciò ho "sfogliato" tutte le maschere del database (e non solo quelle aperte), per recuperare l'oggetto da aprire.
Invece mi dici che non si può fare e quel codice che ho trovato non ha solo un errore di sinstassi?