Fai attenzione, prova a ragionare su quello che stai facendo...!
Se vuoi ciclare tutte le maschere, ovvio che le devi aprire per modificare ShortcutMenu, perchè da chiuse non hanno effetto se non passando per la Struttura, quindi significa 2 cose...:
1) Devi aprire in Struttura, modificare e Salvare, che non è quello che fai tu...
2) NON DISTRIBUIRAI MAI il Runtime(Accde)... e te lo sconsiglio.
Questo perchè la proprietà ShortcutMenu non la puoi modificare RUNTIME in una maschera chiusa.
L'elenco delle Maschere tutte, è nella Collection Containers, sottoCollection Forms, SottoCollection Documents
Function SetMenu(Optional Value As Boolean = False)
Dim db As DAO.Database
Dim doc As Document
Dim frm As Access.Form
Set db = CurrentDb
With db.Containers!Forms
For Each doc In .Documents
DoCmd.OpenForm doc.Name, acDesign
Set frm = Forms(doc.Name).ShortcutMenu = Value
DoCmd.Close acForm, doc.Name, acSaveYes
Next
End With
End Function
Se invece la vuoi modificare RUNTIME allora lo puoi fare SOLO quando la maschera si apre... alchè basta fare così:
' IN un MODULO bas
Private bMnuEnabler As Boolean
Function SetEnabler(Optional Value As Boolean = True)
bMnuEnabler = Value
End Function
Function SetMenu()
Dim mf As Access.Form
Set mf = CodeContextObject
mf.ShortcutMenu = Not bMnuEnabler
End Function
In AutoExec fai eseguire la Funzione SetEnabler senza parametri, ed in tutte le maschere su Evento Load nella maschera proprietà incolli =SetMenu() e viene richiamato senza scrivere codice nel VBEditor.
Quando il DB lo apre un utente la costante vale True, ma Negata = False ed il menù sarà DISABILITATO, se lo apri tu che Bypassi AutoExec la Variabile vale False che Negata=True