Non è necessario eseguire alcuna operazione, poiché la sottomaschera viene salvata non appena perde lo stato attivo (quando il controllo Struttura a schede cambia).
Ma come esercizio, ho delineato il codice che avresti scritto se avessi avuto bisogno.
È possibile salvare qualsiasi modulo impostando la proprietà .Dirty su False. Per qualcosa del genere che girerà molto, penso che scriverò un sottotitolo per esaminare le sottomaschere, controllare se sono sporche e salvare quelle sporche. Qualcosa di simile a questo:
Public Sub SaveSubFormsOnTab()
Dim pge As Control
Dim ctl As Control
For Each pge In Me!ctlTab.Pages
Debug.Print pge.Name
For Each ctl In pge.Controls
If ctl.ControlType = acSubform Then
If ctl.Form.Dirty Then
ctl.Form.Dirty = False
End If
Debug.Print ctl.Name
End If
Next ctl
Next pge
Set ctl = Nothing
Set pge = Nothing
End Sub
Ora, che in realtà è abbastanza inefficiente nei casi in cui si hanno un sacco di controlli del controllo di scheda che non sono sottomoduli. Se la tua scheda non ha altro che sottomodifiche, sarà abbastanza efficiente. In entrambi i casi, è molto più efficiente utilizzare una raccolta personalizzata popolata nell'evento OnLoad del modulo e quindi si varca quella raccolta che non include nient'altro che le sottomodifiche del controllo struttura a schede e salva quelle che sono sporche.
Uno di questi è preferibile utilizzare l'evento OnChange della scheda, poiché ogni volta che si aggiunge una scheda con una sottomaschera o si modifica il nome di un controllo di sottomaschera, è necessario modificare l'evento OnChange.
fonte
2010-04-14 01:04:20
Ho trovato una soluzione. Devo eseguire un codice per aggiornare altri campi quando alcuni dati vengono modificati. Quello che stava succedendo era che non sparava quando doveva ... Grazie per l'input! – Icode4food
Per questo è possibile considerare gli eventi LostFocus dei controlli della sottomaschera. –