maurogsc.eu
|
![]() |
home ==> Excel: articoli ==> UserForm - UserForm standardizzata
UserForm - UserForrm standardizzata
Situazione.
Vogliamo che nel nostro progetto vba, tutte le UserForm ed i controlli abbiano
lo stesso aspetto per ciò che riguarda i colori e i caratteri utilizzati,
insomma standardizzare tutto. Vorremmo inoltre intervenire in un'unica posizione
per modificare colore e fonts di UserForm e controlli se se ne presentasse la
necessità. Possiamo raggruppare la gestione di colori e fonts in un modulo
standard. Una serie di costanti renderanno più facile effettuare le modifiche ed
una semplice routine le eseguirà. In ciascuna UserForm sarà sufficiente inserire
una chiamata alla routine nell'evento Initialize. Vediamo come.
Nota.
Il codice dell’esempio, scaricabile a questo link,
è commentato e nella cartella in formato .zip è
contenuti un file di Excel .
Il codice ed il file sono forniti *così come sono* e
l’autore declina ogni responsabilità su eventuali
problemi causati dal codice o dal file se usato
impropriamente. Utilizzate gli esempi forniti o files
di test per le vostre prove. Codice e file sono stati
testati con(e quindi validi per) Excel 2000/Xp(2002)/2003/2007/2010.
Subito il codice.
ALT+F11 e siamo nell’editor del Visual Basic.
Cominciamo con inserire un modulo standard nel nostro
progetto(Inserisci-->Modulo).
Andiamo a creare una serie di costanti che renderanno più semplici
i settaggi e le modifiche:
Public Const ROSSO As Long = &HFF& Public Const BIANCO As Long = &HFFFFFF Public Const GIALLO As Long = &H80FFFF Public Const VERDE As Long = &HC0C0& Public Const NERO As Long = &H0& Public Const BLU As Long = &HFF0000
E questo il codice della routine che effettuerà le modifiche a colori e fonts nelle UserForm:
Public Sub m(ByRef uf As UserForm)
'dichiaro le variabili
Dim ctrl As Control
'UserForm
With uf
'colore sfondo
.BackColor = GIALLO
'ciclo i controlli e per tipo
'coloro sfondo e altro
For Each ctrl In .Controls
'CommandButton
If TypeOf ctrl Is MSForms.CommandButton Then
'colore sfondo
ctrl.BackColor = ROSSO
'colore testo
ctrl.ForeColor = BIANCO
'TextBox
ElseIf TypeOf ctrl Is MSForms.TextBox Then
'colore sfondo
ctrl.BackColor = VERDE
'tipo carattere
ctrl.Font.Name = "Verdana"
'dimensione carattere
ctrl.Font.Size = 9
'colore testo
ctrl.ForeColor = BLU
'Label
ElseIf TypeOf ctrl Is MSForms.Label Then
'colore sfondo
ctrl.BackColor = BIANCO
'colore testo
ctrl.ForeColor = NERO
'tipo carattere
ctrl.Font.Name = "Verdana"
'dimensione carattere
ctrl.Font.Size = 9
'corsivo
ctrl.Font.Italic = True
'grassetto
ctrl.Font.Bold = True
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set ctrl = Nothing
End Sub
La routine si aspetta un parametro, la UserForm chiamante. Il commento del codice dovrebbe chiarire quanto viene eseguito. I colori e i settaggi dei fonts sono *esagerati* per rendere meglio l'effetto di ciò che succede.
Il codice delle UserForm.
Per utilizzare la routine, basta una riga di codice nell'evento Initialize di
ciascuma UserForm che andremo a creare, passando come parametro il riferimento
alla UserForm chiamante:
Private Sub UserForm_Initialize()
Call m(Me)
End Sub
Finito.
Ogni UserForm che richiamerà la routine nell'evento Initialize, avrà(in questo
specifico esempio) colore di sfondo, CommandButton, TextBox e Label con i colori
e font predefiniti nella routine stessa. Se volessimo modificare qualcosa
in tutto il progetto, sarà sufficiente modificare il valore passato alla
proprietà nella routine m().
Per ulteriori informazioni su Microsoft Excel ed il suo Visual Basic, utilizzate
questo forum:
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
Ultimo aggiornamento di questa pagina: 12/02/2010 - mauro gamberini