+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Abilitare/disabilitare campo di una maschera in relazione a casella di controllo

  1. #1
    massi.pg non è in linea Novello
    Post
    6

    Abilitare/disabilitare campo di una maschera in relazione a casella di controllo

    Buongiorno a tutti,
    mi scuso se il titolo è poco chiaro e/o se esiste già un thread su questo argomento, ma io non l'ho trovato.
    Utilizzo Access 2013 e dovrei impostare una macro per effettuare le seguenti operazioni:
    Devo creare una maschera con alcuni campi collegati tra loro, come ad esempio:
    - Campo di tipo casella di controllo (sì/no) denominato "Presenza sintomi";
    - Campo "Descrizione sintomi" in cui l'utente può inserire liberamente un testo (es.: "febbre", "tosse", "astenia", etc.);
    - Campo "Data comparsa sintomi", di tipo data/ora.
    Il punto è che, per evitare errori di compilazione da parte dell'utente, vorrei che la compilazione dei campi "Descrizione sintomi" e "Data comparsa sintomi" sia consentita solo se la casella di controllo "Presenza sintomi" era stata precedentemente attivata (sì). In caso contrario, vorrei che i suddetti campi fossero bloccati.
    Potreste gentilmente guidarmi nell'impostazione della macro necessaria per effettuare questa operazione?
    Grazie mille a chi vorrà aiutarmi!
    Massi

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,220
    Utilizzi una Maschera in Visualizzazione SINGOLA o CONTINUA...?
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Luogo
    Conversano
    Post
    2,953
    Io ho fatto un test sull'evento "Dopo aggiornamento" di [Presenza sintomi] così
    codice:
    Private Sub Presenza_sintomi_AfterUpdate()
    Me![Descrizione sintomi].Locked = Not Me![Presenza sintomi]
    Me![Data comparsa sintomi].Locked = Not Me![Presenza sintomi]
    End Sub
    e funziona (maschera singola).
    ...P.S.: però mi accorgo che, passando a un altro record, se non stuzzico (aggiorno) [Presenza sintomi] non accade nulla per entrambi i valori True/False, ossia il campo non si blocca...forse occorre rivedere qualcosa a livello di scelta evento.

    Se vuoi usare la macro (qualcosa comincio a dimenticarla)...normalmente io avrei usato ImpostaValore per l'assegnazione =, ma pare che le ultime versioni di Access offrono una particolare impostazione che si chiama ImpostaProprietà che dovrebbe semplificare qualche sintassi. Vedi tu come destreggiarti meglio.
    Ultima modifica di OsvaldoLaviosa; 19-02-2016 12:54 

  4. #4
    massi.pg non è in linea Novello
    Post
    6
    Penso che in visualizzazione singola possa andar bene
    [IMG]C:\Users\Massimiliano\Pictures\Saved Pictures[/IMG]

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,220
    Quote Originariamente inviato da massi.pg Visualizza il messaggio
    Penso che in visualizzazione singola possa andar bene
    [IMG]C:\Users\Massimiliano\Pictures\Saved Pictures[/IMG]
    La tua immagine in LOCALE non è visibile...

    Diciamo che solo se usi la maschera singola puoi gestire questi aspetti...
    Si parte dal fatto che i controlli sono Enabled=False(oppure se gestire Loked=true) come Stato di DEFAULT e questo è fondamentale.
    Io preferisco Enabled in quanto si vede chiaramente che sono disattivi.

    Quindi ora devi considerare 2 aspetti.
    1° Quando sei sul Record Corrente e modifichi, attivando lo stato [Presenza sintomi]=Vero
    In questo caso devi abilitare i 2 controlli su Evento DopoAggironamento della CheckBox
    codice:
    Private Sub Presenza_sintomi_AfterUpdate()
        Me![Descrizione sintomi].Enabled= Me![Presenza sintomi].Value 
        Me![Data comparsa sintomi].Enabled= Me![Presenza sintomi].Value
    End Sub
    2° Sapendo che i controlli di DEFAULT hanno lo stato ENABLED=FALSE, quando ti sposti di Record in Record... risultano sempre DISABILITATI, quindi devi implementare anche su Evento Current di Maschera il test...
    codice:
    Private Sub Form_Current()
        Me![Descrizione sintomi].Enabled= Me![Presenza sintomi].Value 
        Me![Data comparsa sintomi].Enabled= Me![Presenza sintomi].Value
    End Sub
    Volendo essere pignoli poi ci sarebbe da capire se, una volta Abilitato [Presenza sintomi]=Vero, questo possa o meno essere disattivato...!

    P.S. Non usare Nomi di Campi/controlli con caratteri speciali come Spazio nel tuo caso... è una rottura poi perchè complica le sintassi obbligandoti all'uso di parentesi quadre o altro...!
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  6. #6
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Luogo
    Conversano
    Post
    2,953
    Condivido a pieno l'analisi a tutto tondo di @Alex.
    Quote Originariamente inviato da @Alex
    Volendo essere pignoli poi ci sarebbe da capire se, una volta Abilitato [Presenza sintomi]=Vero, questo possa o meno essere disattivato...!
    Giustamente potrebbe succedere di voler disabilitare [Presenza sintomi] lasciando invariati i valori negli altri 2 campi/controlli: ciò sarebbe una incoerenza.
    Forse andrebbero aggiunte altre 2 righe di codice che impostano Null nei 2 controlli in caso di False.

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,220
    Quote Originariamente inviato da OsvaldoLaviosa Visualizza il messaggio
    Condivido a pieno l'analisi a tutto tondo di @Alex.

    Giustamente potrebbe succedere di voler disabilitare [Presenza sintomi] lasciando invariati i valori negli altri 2 campi/controlli: ciò sarebbe una incoerenza.
    Forse andrebbero aggiunte altre 2 righe di codice che impostano Null nei 2 controlli in caso di False.
    No il discorso è diverso.
    Una volta ABILITATO, ha senso poterlo DISABILITARE...?
    Se la risposta è NO, si deve INIBIRE la possibilità di farlo.
    Se la risposta è SI, si deve pensare cosa fare con i 2 Controlli, vanno Disabilitati solo oppure anche svuotati...?

    Come sempre serve RIFLETTERE prima.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  8. #8
    massi.pg non è in linea Novello
    Post
    6
    Innanzitutto grazie ad entrambi per le preziose indicazioni!
    Scusate se c'ho messo un po' a rispondervi ma sono riuscito solo ora ad applicare quanto mi avete suggerito (sto studiando access da poco e sono alle prime armi con VBA e macro).
    Ho eseguito quello che mi ha suggerito @Alex e funziona tutto bene. I campi sono bloccati di default e si attivano solo se si spunta la casella di controllo, anche secondo me è la soluzione migliore.
    Per quanto riguarda il fatto che, una volta attivata la casella di controllo e compilati i campi ad essa collegati è possibile poi disattivarla e i campi restano compilati, forse la soluzione migliore sarebbe quella che suggerisce @Alex, ossia di inibire la possibilità di disattivare la casella di controllo dopo che è stata in precedenza attivata. In questo modo si eliminerebbe la possibilità di incongruenze (casella di controllo disattivata e campi ad essa collegati compilati).
    Ciò andrebbe fatto anche perché il fine ultimo è quello di evitare errori di compilazione da parte dell'utente e di conseguenza evitare incongruenze nel database.
    Come faccio per inibire la disattivazione della presenza di controllo?
    Grazie ancora.
    Massi

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,220
    Questa cosa la devi applicare all'Evento BEFOREUPDATE del controllo CheckBox...!
    Come vedrai espone un Parametro che si chiama CANCEL.
    Devi semplicemente uguagliare il valore di CANCEL al valore del CheckBox... in quel caso se VERO l'evento BeforeUpdate viene CANCELLATO di conseguenza annullato il passaggio a FALSE.
    Se invece è FALSE potrai passare a TRUE senza problemi.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  10. #10
    massi.pg non è in linea Novello
    Post
    6
    @Alex abbi pazienza , cosa intendi esattamente quando dici
    Devi semplicemente uguagliare il valore di CANCEL al valore del CheckBox...
    ?
    Ho aperto la maschera in visualizzazione struttura e ho selezionato il CheckBox e nella finestra proprietà sulla destra ho cliccato su Evento->Prima di aggiornare->Generatore di codice, dopo di che mi compare:

    Private Sub NomeCheckBox_BeforeUpdate(Cancel As Integer)
    End Sub

    Mi puoi dire cosa devo scrivere esattamente in questo codice?

    Grazie mille

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi