Vba access proprietà enable controlli

di ziot83acn il
8 risposte
Ciao a tutti

grazie a chi potrà aiutarmi ma è solo da qualche mese che mi sono addentrato nella programmazione vba con office

problema da risolvere
maschera di access continua per cui è previsto inserimento e modifica di alcuni record/controlli
I campi presenti sono ad esempio anno (2018), mese (12 x), codProdotto, tempo1, tempo2, ,,, tempot

Ecco vorrei riuscire ad usare la proprietà Enable su tempo1, tempo2, ,,, tempot in base ad un determinato valore di mese

Es: fino al mese 3 --> disabilità il controllo tempo1 sulle 3 righe, poi rendilo editabile sulle restanti 9

Spero di essere stato chiaro

8 Risposte

  • Premesso che dalla tua descrizione traspare una realizzazione non normalizzata, in merito alla problematica devi considerare che, in una maschera, al fine di modificare un record dovrai impiegare la proprietà "AllowEdits"
    https://docs.microsoft.com/en-us/office/vba/api/access.form.allowedits
    mentre per abilitare o disabilitare un controllo puoi agire sulle proprietà "Enabled" e "Locked"
    https://support.microsoft.com/en-us/office/enabled-property-9819dce1-4502-47c8-88ca-25038ac2cd47

    https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/enabled-property-microsoft-forms
    https://stackoverflow.com/questions/42686968/ms-access-vba-to-enable-disable-a-text-box/42697847

  • Cattura.PNG
    Cattura.PNG

    Non sono riuscito a trovare la soluzione sebbene conosca sommariamente le proprietà
    sopra screen di cosa vorrei ottenere nella maschera continua, la parte grigia è quella che devo implementare (proprietà enable o allow edit cambia in base al controllo di un altro field, in base ai valori di "mese" ad esempio)

    la proprietà enable è possibile attivarla su una parte del controllo (es: primi N valori, etcc)???

    grazie
  • Ciao ziot83acn.

    Nelle maschere a modalità continua le proprietà sono applicate in modo identico a tutte le righe.

    Quindi nel momento che stai inserendo/modificando una riga, per il controllo "Tempo2" le proprietà "Enabled" e "Locked" saranno identiche su tutte le righe.

    Visualizzazione a parte, tu però agisci sempre su una riga sola per volta.
    Quindi con l'evento "Form_Current" sulla riga selezionata puoi cambiare le proprietà "Enabled" e "Locked" controllando il mese o altro campo.

    In fase di immissione di una nuova riga dovrai cambiare le proprietà "Enabled" e "Locked" utilizzando gli eventi del campo Mese "Mese_AfterUpdate" o "Mese_Exit" o altro campo che cambia la condizione.

    Se hai anche necessità di evidenziare il valore nullo di una riga esistente come in figura, devi utilizzare la Formattazione Condizionale (Menu Formato).
  • Grazie della risposta Snupix
    E' evidente che mi mancano delle basi perchè non ho capito se riesco a disabilitare l'inserimento per quella porzione di colonna e non per la restante
    non verranno inserite nuove righe ma al massimo modificati i valori

    si riesce ad avere un paio di righe di codice per capire...grazie
  • Non vorrei che scambi Access per Excel (hanno loggiche diverse) comunque ti consiglio di approfondire la "Formattazione condizionale" ("Conditional Formatting") e, per iniziare, ti cito alcuni link:
    .
    http://rogersaccessblog.blogspot.com/2018/03/how-do-i-use-conditional-formatting-in.html
    https://stackoverflow.com/questions/59136483/conditional-formatting-in-access-with-disabled-or-read-only-textboxes
    https://www.simply-access.com/Advanced-Conditional-Formatting.html
    https://www.access-programmers.co.uk/forums/threads/enable-disable-fields-and-buttons.288144/
  • Ziot83acn, certo che puoi disabilitare o abilitare i campi "tempo" o solo alcuni "tempo".
    Se stai modificando la riga del mese 4, puoi disabilitare l'immissione/modifica dei campi "tempo" cambiando la loro proprietà Enabled e Locked. In quel momento devi disinteressati delle altre righe, non ha nessuna importanza lo stato dei loro campi "tempo". Il tuo focus è solo la riga corrente.

    Prima di tutto dovresti capire quando si attivano gli eventi sul form e sui campi.
    Guarda nelle proprietà del form e dei campi il tab "Evento" e testa gli eventi con dei banali msgbox.
    Msgbox "Evento Form_Current"
    oppure
    Msgbox "Evento Mese_AfterUpdate"
    Ti accorgerai anche di un certo ordine di attivazione.

    Le due righe in realtà sono già presenti nei link indicati da Willy.
    
    Me.tempo1.enabled = False
    Me.tempo1.locked = True
    Me.tempo2.enabled = False
    Me.tempo2.locked = True
    ...
    ...
    
    Ovviamente le impostazioni cambieranno in base al mese della riga selezionata.
    Se non si prevede l'immissione di nuove righe, l'evento può essere solo uno. Quale?
  • All' apertura della form mi trovo già la griglia come in foto. le proprietà devono essere presenti all'apertura quindi.
    sui campi, l'evento enabled deve essere presente all'apertura
    l'utente può modificare o inserire valori di "tempo1", "tempo2" sulla griglia già impostata, solo dove non è disabilitato il controllo.


    sinceramente non riesco a risolverlo (come gli faccio capire che all'apertura della form, "tempo2" per i primi 5 mesi non deve essere editabile?? e per i restanti si)
  • Non è importante lo stato delle proprietà all'apertura, perchè in quel momento Access sta solo mostrando dei campi, non succede più nulla.
    E' già uno stato passato.

    Ti devi preoccupare di cambiare lo stato al momento in cui selezioni la riga.
    Solo in quel momento hai necessità che i campi "tempo" siano abilitati o meno a seconda del mese e quindi via codice cambiare lo stato.
    Per gestire questa operazione devi fare riferimento all'evento "Su Corrente" (On Current ovvero form_current).

    Però se non conosci gli eventi,è del tutto inutile un copia incolla di una subroutine postata qui.
    Devi prima capire come si attivano gli eventi. Non hai altra soluzione.

    https://www.youtube.com/watch?v=p559w9o4Xto&ab_channel=MaurizioCucchiara
Devi accedere o registrarti per scrivere nel forum
8 risposte