Newsgroup: it.comp.appl.access
Titolo: Proprietà enabled

Ciao a tutti,
ho creato una funzione che rimette tutti i controlli di una maschera a OldValue se l'utente non vuole salvare le modifiche.
Se il controllo è di tipo "Etichetta" o "Pulsante" lo ignora, altrimenti modifica il valore del campo sottostante.
Finora non mi ha creato nessun problema; poi però mi sono imbattuto in una maschera che ha un controllo disabilitato (il campo ID) ed ovviamente la funzione non riesce ad impostare il vecchio valore.
Non ho trovato il modo di testare se il controllo è disabilitato.
Speravo in una proprietà tipo ctlControllo.enabled ma non esiste.
 
Function ControlloSalvataggio(frmMaschera As Access.Form) As Boolean
On Error GoTo Err_ControlloSalvataggio
    Dim strRisposta As String
    Dim ctlControllo As control
    If frmMaschera.Dirty Then
        ControlloSalvataggio = True
        strRisposta = MiaMsgBox("Non hai salvato i dati.@ Vuoi farlo ora?@", vbExclamation + vbYesNo, "ATTENZIONE")
        If strRisposta = vbYes Then
            DoCmd.RunCommand acCmdSave
        Else
            For Each ctlControllo In frmMaschera.Controls
                If ctlControllo.ControlType = acLabel Or ctlControllo.ControlType = acCommandButton Then   'ignoro le etichette e i pulsanti
		'speravo di aggiungere alla riga precedente "Or ctlcontrollo.enabled = false"
                Else
                    ctlControllo.Value = ctlControllo.OldValue
                End If
            Next
        End If
    End If
Exit_ControlloSalvataggio:
    Exit Function
Err_ControlloSalvataggio:
    MiaMsgBox "Si è verificato il seguente errore:@N° " & Err.Number & " - " & Err.Description & "@"
    Resume Exit_ControlloSalvataggio
End Function
 
Come faccio a dire a VBA di ignorare anche i controlli disabilitati?
 
Grazie
Franco

Sai che le LABEL non supportano la proprietà Enabled...?
 
Se vuoi applicare Enabled perché devi farlo solo a quelli Enabled...?
Se li vuoi disabilitare e sono già disabilitati rimangono disabilitati...
 
@Alex


Scusa Alex, non mi sono spiegato.
La maschera prende i dati da una tabella del DB; il controllo disabilitato è una casella di testo e non voglio cambiarne la proprietà Enabled. Se l'utente prova a cambiare record o chiudere la maschera senza aver prima salvato le modifiche effettuate, sull'evento BeforeUpdate della maschera richiamo la mia funzione che controlla se ci sono state modifiche non salvate ( If frmMaschera.Dirty), quindi chiede conferma del salvataggio non effettuato e, se la risposta è No, cicla tra tutti i controlli della maschera per ripristinare il valore precedente alla modifica (ctlControllo.Value = ctlControllo.OldValue). Il ciclo "For Each ctlControllo In frmMaschera.Controls" controlla tutti i controlli presenti indistintamente, perciò evito di controllare le Etichette e i Pulsanti ( If ctlControllo.ControlType = acLabel Or ctlControllo.ControlType = acCommandButton) perché mi restituiscono un messaggio di errore.
Il problema sta nella casella di testo disabilitata: il codice mi restituisce l'errore "Impossibile assegnare un valore all'oggetto", presumo proprio perché è disabilitata. Quindi dovrei testare se il controllo è disabilitato e ignorarlo nel ciclo "For Each … Next" e questo non lo so fare.
Se invece esiste un altro metodo per ciclare solo su alcuni controlli della maschera e non su altri, meglio ancora.
Grazie
Franco

 Se invece esiste un altro metodo per ciclare solo su alcuni controlli della maschera e non su altri, meglio ancora.
 
puoi inserire una stringa "di riconoscimento per lo scopo" 
nella proprietà tag del(i) controllo(i)
e, nel ciclo di ricognizione, saltare il(i) controllo(i)
 


Perfetto, funziona!
Grazie