Usare un CommandButton (ActiveX) per una doppia istruzione.  (16/06/03)

Ovvero: come far eseguire allo stesso CommandButton due istruzioni alternate sfruttando l'evento Click.

Tutte le operazioni eseguite tramite una routine vba non sono intercettabili dall'opzione "Annulla" del menù "Modifica/Annulla". Una volta che il codice vba è stato eseguito, le istruzioni eseguite sono permanenti e si potranno annullare solo se prevediamo un routine che esegua al contrario le stesse istruzioni. A questo punto avremmo bisogno di un'altro commandbutton con le istruzioni per il ripristino, ma si può fare tutto con un solo commandbutton, sfruttando la sua proprietà Caption. Sarà sufficiente creare un'istruzione condizionale ( If... Then ) che legga il valore della Caption e su questo valore esegua l'istruzione appropriata. Il segreto di tutto è: facciamo cambiare il valore della Caption al primo Click sul commandbutton e lo ripristiniamo al secondo Click: in questa alternanza impostiamo le condizioni che il codice legge, ed eseguirà l'istruzione relativa. Facciamo un esempio, supponiamo di voler cambiare il colore delle celle in un certo range, e poi di volerlo ripristinare (è un esempio banale, ma serve allo scopo di vedere i passaggi) se necessario.

Per prima cosa, una volta inserito il CommandButton prendendolo da "Casella degli strumenti" o da "Strumenti di controllo" ( a secondo le versioni di Excel), e quindi un "controllo" ActiveX, ci rechiamo nell'editor di visual basic, in modalità "progettazione", e nella finestra delle proprietà del CommandButton, alla proprietà Caption, assegniamo un nome, ad esempio "Pigia". Questa sarà la parola che vedremo scritta sul pulsante, e questa parola sarà il valore di default assegnato al commandbutton, ovvero all'apertura della cartella quello è il nome con cui il pulsante si presenta. Ora vediamo come compilare le istruzioni, da inserire nell'evento Click dello stesso CommandButton:

Private Sub CommandButton1_Click()

'si controlla il valore della Caption : se è uguale a Pigia, si esegue
If CommandButton1.Caption = "Pigia" Then

'l'istruzione che colora di giallo il range di celle e

Range("C1:D10").Interior.Colorindex = 6

'ora rinomina la Caption in Annulla; in questo modo al prossimo click, con la caption 'impostata ad "Annulla", verrà eseguita

CommandButton1.Caption = "Annulla"

'con Else, questa istruzione, che

Else

'ripristina il colore togliendolo

Range("C1:D10").Interior.Colorindex = xlNone

'e rinomina la Caption Pigia

CommandButton1.Caption = "Pigia"

End If
End Sub

E' evidente che potrà essere eseguita qualunque istruzione, compresa la sostituzione di valori e il relativo ricalcolo.

 

 

Buon lavoro.

prelevato sul sito http://ennius.interfree.it