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:
 
  BloccaSbloccaForm.zip (23Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.