Crearsi Menù personalizzati usando UserForm. - dal 04/09/04 pagina vista: volte

Prendo spunto da un'ennesima domanda sui menù personalizzati, per puntualizzare una volta per tutte il mio pensiero:

Sono profondamente contrario a modifiche sulle barre strumenti. A casa propria ognuno fa ciò che gli aggrada, ma non può imporre ad altri delle sue scelte, ed è quanto succede se inviate o passate un vostro file con istruzioni che prevedano inserimenti o comunque modifiche alle barre standard di Excel.. Provare una routine che modifica le mie barre mi manda in bestia, soprattutto quando non si prevede, all'uscita da Excel, il ripristino delle precedenti barre. Mi domando però come può un'estraneo, conoscere come mi sono, (o vi siete), impostato i menù per poterli poi ripristinare. Sì, perchè dovete sapere, che se vi mettete a trafficare con barre e menù personalizzati, le modifiche effettuate via codice sui menù, poi restano su Excel anche in seguito.

Anzichè proseguire sulle mie ragioni, lanciando anatemi a chi osa modificare i miei menù (ma anche i vostri se non siete d'accordo), mi permetto di suggerire una maniera per ottenere dei menù personalizzati, senza che nessuno incorra in ire o frustrazioni, e soprattutto senza apportare modifiche ai menù esistenti. Una cosa del genere pensate che vi potrebbe andar bene, o voi "pistolettari" dei "menù fai da te" ?

Spero di si, quella che vedete sopra è una Barra ottenuta con una UserForm, comunque vediamo come "operare":

  • aggiungere una UserForm al progetto, dimensionandola in larghezza ed altezza, e scegliendo, se volete un colore di fondo che vi aggrada, facendola apparire all'apertura del foglio di lavoro, sfruttando l'evento Open del Workbook, così:

  • Private Sub Workbook_Open()
    UserForm1.Show
     'nome della userform da aprire
    End Sub

  • impostare la proprietà ShowModal della UserForm a False. Con ShowModal impostata a True (di default è True) NON è possibile togliere il focus dalla userform, ovvero non è possibile utilizzare nè il foglio di lavoro, nè i vari menù di Excel. La Versione 97 di Excel non accetta l'impostazione a False, e quindi queste note non sono usabili con questa versione.

  • impostare due istruzioni, sfruttando l'evento Activate della UserForm, che servono a determinare in quale punto dello schermo visualizzare la stessa UserForm. E' necessario usare due proprietà della UserForm, la Top e Left, che determinano la distanza tra la UserForm e il bordo superiore (Top) e il bordo sinistro (Left) della finestra che la contiene. L'esempio che vediamo sopra, ha queste impostazioni:

  • Private Sub UserForm_Activate()
    Top = 5        
    '5 e 15 sono i valori Single che determinano le distanze
    Left = 15
    End Sub

  • ognuno potrà regolando questi valori, posizionare la userform dove più preferisce, la scelta dei valori dipende sia dalla dimensione della userform, sia dalla risoluzione schermo tenuta.

  • una volta posizionata la userform , resterà visibile qualunque foglio si selezioni, rendendo sempre possibile l'utilizzo dei pulsanti e dello loro routines. Al tempo stesso è possibile spostare la UserForm, per raggiungere le zone dei menù sottostanti.

Appare evidente che questa soluzione, permette di personalizzare al massimo i pulsanti, potremo agire infatti su:

  • colore di fondo del CommandButton, sfruttando la proprietà BackColor

  • inserire sul CmdButton  l'icona che più ci piace, sfruttando la proprietà Picture e selezionando il percorso che mira all'icona o a un'immagine.

  • oppure sfruttare la proprietà Font del CmdButton per determinare il tipo di carattere e sua dimensione, nel caso si voglia usare la proprietà Caption del CmdButton per inserire testo.

  • inoltre è possibile sfruttare la proprietà ControlTipText del CmdButton  per scrivere testo che apparirà quando posizioneremo il mouse sul CmdButton, indicando la funzione o l'azione ottenibile con quel pulsante ( il VAI A MAGAZZINO visibile nell'immagine sopra)

  • oppure ancora, anzichè usare commandbutton, potrete usare delle Label (etichette), o ComboBox per avere come un menù a discesa, insomma, usate un pò di fantasia per personalizzare la vostra barra dei menù.

  • Un ultima cosa: se volete che nessuno possa chiudere la UserForm sfruttando la X di chiusura, mettete questa istruzione nell'evento QueryClose della UserForm

  • Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = True 
    'questo impedisce alla form di venire chiusa
    End Sub

Se vi ho suggerito una buona idea, meglio.

 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org