maurogsc.eu
mauro gamberini


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