Premesso che leggere e capire quello che hai scritto è complesso… sarà colpa mia…
Se l'obiettivo è di non chiudere la Maschera, non si pasticcia con i Pulsanti come hai pensato, anche perchè basta premere ALT+F4 e la maschera si chiude ugualemente, quindi la tua soluzione è sbagliata.
L'inibizione alla chiusura si realizza intercettando l'evento UNLOAD e forzando a TRUE il parametro CANCEL…
Private Sub Form_Unload(Cancel As Integer)
Cancel=TuoValore
End Sub
Fintanto che la Variabile [TuoValore] = True, l'evento verrà inibito, quando modificherai a False la variabile la maschera si potrà chiudere.
Solitamente non si condizionano Maschere da altre maschere, o meglio si dovrebbe evitare di realizzare legami rigidi, le maschere sono Oggetti e se serve si passano parametri all'apertura o si predispongono Properties per operare sui dati… il metodo cambia se la maschera è aperta come Modale o meno…!
Sicchè se usi OpenForm, in modalità [AcWindowMode = acDialog] si usa il parametro OpenArgs per passare un dato condizionante
Sub OpenForm(FormName, [View As AcFormView = acNormal],
[FilterName],
[WhereCondition],
[DataMode As AcFormOpenDataMode = acFormPropertySettings],
[WindowMode As AcWindowMode = acWindowNormal],
[OpenArgs])
Membro di Access.DoCmd
Da usare così:
DoCmd.OpenForm "NomeForm", , , , , acDialog, True
su LOAD della Form si recupera il parametro e si gestisce il condizionamento…
Option Compare Database
Option Explicit
Private blInhibitClose As Boolean
Private Sub Form_Load()
If Len(Me.OpenArgs & vbNullstring)>0 Then blInhibitClose=cbool(Me.OpenArgs)
End Sub
Poi quando hai le condizioni per chiudere la Form, modifichi il valore della Variabile [blInhibitClose] e la form si chiude.
Se poi vuoi anche condizionare lo stato del Button…
Option Compare Database
Option Explicit
Private blInhibitClose As Boolean
Private Sub Form_Load()
If Len(Me.OpenArgs & vbNullstring)>0 Then
blInhibitClose=cbool(Me.OpenArgs)
Me!NomeButton.Enabled=blInhibitClose
End if
End Sub