Abilitare/Disabilitare pulsanti-maschera con macro

di il
4 risposte

Abilitare/Disabilitare pulsanti-maschera con macro

Ho una maschera principale SUPPORTI con 2 sottomaschere TITOLI-SUPPORTI e INTERPRETI-TIT-SUPP.
Sulla maschera principale SUPPORTI ho molti pulsanti, attualmente sono tutti Abilitati, ma per alcuni vorrei che fossero Disabilitati a seconda di certe circostanze. Chiamerò, per comodità, i pulsanti 1, 2, 3.
Vorrei che, normalmente (ossia all'apertura della maschera) il tasto 1 fosse Disattivato, mentre 2 e 3 Attivati.
Però se digito del testo nel campo della sottomaschera TITOLI-SUPPORTI.Indirizzo vorrei che si attivasse il pulsante 1 e disattivassero i pulsanti 2 e 3.

Ho provato a consultare la Guida in linea all'argomento "Convalidare o limitare i dati in una maschera"\"Bloccare o disattivare un controllo"\"Suggerimento"
In una maschera o in un report, è possibile utilizzare la proprietà Abilitato insieme alla proprietà Dopo aggiornamento per disattivare un controllo fino a quando non viene immesso testo o non viene eseguita una selezione in un altro controllo. È possibile, ad esempio, disattivare un pulsante di comando fino a quando non vengono immessi dati in una casella di testo. Tramite la proprietà Dopo aggiornamento della casella di testo, è possibile chiamare una routine evento o una macro che consente di attivare il pulsante di comando.
Proprio l'ultima frase vorrei mettere in atto con una macro, ma non ho capito con quali istruzioni macro si possa realizzare.
In più avrei l'aggravante che i pulsanti 1,2,3 sono collocati sulla maschera principale, mentre il campo-testo che deve far cambiare le cose si trova nella 1a sottomaschera...temo che questo complichi un po' di cose.

4 Risposte

  • Re: Abilitare/Disabilitare pulsanti-maschera con macro

    Premesso che io non farei mai una cosa simile... mi limiterei a VALIDARE l'evento CLICK del Button... e questo perchè le condizioni di UNDO che devono resettare il tutto sono rognose...!
    Oltretutto devi prevedere un RESET anche su EVENTO CURRENT che ovviamente si scatena ad ogni cambio Record, in questo in particolare hai una condizione aggiuntiva che è NEWRECORD...

    Nel tuo caso pertanto avrai una Routine di Reset che chiamerai su Load/Current(da verificare se anche su NewRecord), quindi avrai gli eventi AfterUpdate del/Dei Controlli TextBox che andranno a modificare lo stato Enabled del/dei controlli Button.

    Questo è il Riassunto di quanto servirebbe... ora prova a generare una tua bozza di codice e provvediamo ad analizzarlo se non dovesse funzionare.
  • Re: Abilitare/Disabilitare pulsanti-maschera con macro

    Io non la vedrei così drammatica se consideri che ad ogni mio pulsante corrispondono sempre la chiusura della maschera principale e apertura di altre. Ripeto sempre che non so usare i moduli Visual Basic e che finora, per risolvere tutti i problemi relativi ad aggiornamenti record, con tutte le loro conseguenze, me la sono cavata sempre sfruttando l'idea di chiudere e riaprire tutto e riposizionandomi su questo o quel record prescelto, tutto con le macro. Per quanto sia una strada tortuosa e/o poco ortodossa, tutto sommato, funziona a meraviglia.
    Ma provo ad essere più concreto e ad avvicinarmi al Visual Basic!!!

    Intanto mi correggo, il nome della maschera principale è SUPPORTImod.
    Ho la seguente macro:

    ApriMaschera: SUPPORTImod
    VaiAControllo: Nuovo Titolo (Incolla) sarebbe il Pulsante 1

    adesso vorrei rendere la Proprietà Abilitato (Enabled) impostata a False.
    A questo punto la macro non può più aiutarmi, allora provo ad impostare la proprietà del pulsante "Su attivato", scegliendo [Routine evento] e cliccando sui tre puntini, mi appare questo:

    Private Sub Nuovo_Titolo__Incolla__GotFocus()

    End Sub

    sulla sinistra del modulo Visual Basic vedo selezionati sia la maschera SUPPORTImod (in alto), sia tutte le proprietà del pulsante (in basso). So di essere ad un passo dalla compilazione del codice, ma non so proprio da dove cominciare. Piuttosto che dirmi direttamente il codice corretto (la famosa pappa pronta), potresti indicarmi che uso posso fare delle due finestre di sinistra e/o che cosa va selezionato/trascinato all'interno del codice?
  • Re: Abilitare/Disabilitare pulsanti-maschera con macro

    Solo tu sai come ti approcci allo sviluppo, pertanto quando poni una domanda, se non dai gli estremi è normale che il lettore ipotizzi un metodo equivalente allo standard... o più prossimo al proprio.

    Detto questo, io di certo non sono il fornitore di "pappa pronta" di norma mi astengo dal farlo... quindi apprezzo la tua richiesta.

    Premesso che il VBA è fondamentale per uno sviluppo professionale, credo che prima di passare a trascinare codice(cosa non fattibile) il codice va costruito... conoscendone la struttura.
    Per qusto serve un MINIMO di base.

    Posso suggerirti un demo per il DEBUG che spiega anche l'uso di strumenti volti a capire come strudiare il codice, ma si basa su un minimo di KnowHow di base...
    http://forum.masterdrive.it/access-79/access-debug-44533/

    Nel tuo esempio devi imporre il valore Booleano FALSE alla proprietà ENABLED del controllo CommandButton specifico...
    La sintassi per far riferimento ad un'oggetto in una Maschera dipende da dove viene chiamato...
    Se ti riferisci ad un'oggetto all'interno della maschera che chiama il codice si può semplificare così
    
    Me!NomeControllo.NomeProprietà=ValoreProprietà
    dove me è il riferimento esplicito alla Maschera come abbreviazione di
    
    Forms!NomeForm <----> Me (solo nel caso di chiamata interna)
    che nel tuo caso diventa
    
    Me!NomeCommandButton.Enabled=False
  • Re: Abilitare/Disabilitare pulsanti-maschera con macro

    OK perfetto, grazie mille.

    Nel frattempo, scopro che tutto questo è realizzabile con l'azione macro ImpostaValore.
    Sfruttando la sintassi suggerita da Alex, vengo a scoprire che esiste un apposito argomento della guida in linea intitolato "Impostare il valore di una proprietà in risposta ad un evento", dove si può scegliere se farlo con macro o codice Visual Basic.
Devi accedere o registrarti per scrivere nel forum
4 risposte