| Forms |
| 3.56 Bloccare e sbloccare da VBA i controlli di una maschera e dell'eventuale sottomaschera in essa contenuta |
| Christian Pozzati |
|
(D) E' possibile bloccare la modifica dei dati in maschera? (R) Il problema è facilmente risolvibile con queste due funzioni:
'--------------------- Sblocca Maschera --------------
Public Function sbloccamask(mask, prompt As Boolean)
'la variabile prompt attiva il messaggio di avvertimento sblocco maschera
Dim risposta, valore As Boolean
Dim ctl As Object
If prompt = True Then
risposta = MsgBox("Attenzione si stanno per sbloccare i dati del cliente per eventuale modifica", vbYesNo, "Sblocco i dati?")
End If
If risposta = vbYes Then
Forms(mask).AllowEdits = True
valore = False
ElseIf risposta = vbNo Then
Forms(mask).AllowEdits = False
valore = True
End If
' sblocca anche ogni sottomaschera
For Each ctl In Forms(mask).Form
'Debug.Print ctl.name
If ctl.ControlType = acSubform Then
Forms(mask).Form(ctl.Name).Locked = valore
End If
Next ctl
End Function
'--------------------- Blocca Maschera --------------
Public Function bloccaon(mask)
Dim valore
Dim ctl As Object
'questo valore puņ anche estrapolato da un altra tabella/controllo
'e serve per attivare la presenza o no dei pulsanti di modifica sulle maschere,
'ad esempio io lo prelevo da una tabella chiamata SETUP
'Valore= -1 pulsante visibile e maschera bloccata,
'Valore=0 pulsante invisibile e maschera sbloccata.
valore = -1
Forms(mask)!pls_modifica.Visible = valore
Forms(mask).AllowEdits = Not (valore)
' blocca anche ogni sottomaschera
For Each ctl In Forms(mask).Controls
'Debug.Print ctl.Name
If ctl.ControlType = acSubform Then
Forms(mask).Form(ctl.Name).Locked = valore
End If
Next ctl
End Function
L'unico vincolo del modulo e che il pulsante si deve sempre chiamare "PLS_MODIFICA" su ogni maschera. Alcuni esempi di utilizzo: 'All'apertura di qualsiasi maschera, 'blocca la TUTTA la maschera (sottomaschere comprese) Private Sub Form_Open(Cancel As Integer) Call bloccaon(Form.Name) End Sub 'Pulsante MODIFICA per sbloccare la TUTTA la maschera (sottomaschere comprese) Private Sub pls_modifica_Click() 'True attiva il messaggio di conferma 'False esegue in modo silent. Call sbloccamask(Form.Name, True) End Sub 'Pulsante SALVA per ri-bloccare la TUTTA la maschera (sottomaschere comprese) Private Sub pls_salva_Click() DoCmd.RunCommand acCmdSaveRecord Call bloccaon(Form.Name) End Sub Download: |