Appena ho un attimo di tempo leggo bene il tuo intervento max.riservo, e ti dico la mia. Intanto avverto che ho risolto il mio problema, diciamo che l'ho bypassato, dopo aver sudato le classiche sette camicie per capire che cosa lo origina. Allora, il problema si verifica solo con le form aperte in multiistanza. Per chi è alle prime armi con Access spiego. Se da VBA voglio aprire la form “Clienti” devo usare l'istruzione
DoCmd.OpenForm “Clienti”
Se voglio aprire la stessa form un'altra volta, per averne due assieme, non posso usare la stessa istruzione, poiché una seconda form non viene aperta. In questo caso è necessario aprire la form con istruzioni del tipo
Dim MyForm as Form
Set MyForm = New form_Clienti
MultiForm.Add MyForm, MyForm.HWnd & ""
Set MyForm = Nothing
dove MultiForm è una collection.
In questo modo posso aprire più istanze della stessa form, cosa necessaria ad esempio per avere i dati di due clienti affiancati per confronti o per copia di campi dall'uno all'altro. Ebbene, nel mio caso le form multiistanza funzionano bene finché l'applicazione rimane aperta, ma a chiusura e successiva riapertura alcune sono deteriorate, nel senso che non si aprono più. Il rimedio è aprirle in design e da lì chiedere la visualizzazione in formato form o sheet, è uguale. Così vanno a posto. Si tratta senz'altro di un bug di Access 365, quello che uso io e che usano i miei due clienti cavia presso i quali faccio i test. Purtroppo è un bug che si trascina da mesi. Come ho risolto?
Prima di tutto ho minimizzato il problema, aprendo sempre la prima volta la form con il classico DoCmd.OpenForm, cosa che non dà problemi. Solo quando viene richiesta l'apertura della stessa form in un'altra copia, questa e le eventuali successive le apro generando un'istanza. Per far questo ho un piccolo codice:
if CurrentProject.AllForms("Clienti").IsLoaded = False then
DoCmd.OpenForm "Clienti"
else
Set MyForm = New form_Clienti
MultiForm.Add MyForm, MyForm.HWnd & ""
Set MyForm = Nothing
endif
Durante il mio sviluppo io non ho bisogno di aprire due volte la stessa form, per cui non ho più il problema. Nel mio caso anche le form delle quali permetto la multiistanza vengono aperte con DoCmd. Per i miei clienti approfitterò della versione di riferimento dell'applicativo (database.accdb, per intendersi) presente sul server. La sua presenza è dovuta al fatto che ogni client la porta in locale ogni volta che c'è un aggiornamento di versione. Questa operazione viene fatta da un piccolo applicativo che lancia quello vero, e che prima di lanciarlo controlla la versione. Ebbene, a questo punto la copia in locale gliela farò fare sempre, anche se non c'è un aggiornamento di versione. In questo modo se l'applicativo locale si è rovinato alla chiusura perché l'utente ha aperto delle form in multiistanza, la successiva riapertura avverrà con la versione fresca presente sul server.