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: |