maurogsc.eu
mauro gamberini


home ==> Excel: come fare per ==> Function: argomenti opzionali

Function: argomenti opzionali - VBA

NOTA. La soluzione ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dal codice o dalla soluzione proposta se usati impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare il codice o la soluzione in files importanti.

1 - Come passare alla Function un argomento obbligatorio ed un argomento opzionale:

Public Function f(ByVal s1 As String, Optional ByVal s2 As String) As String
    f = s1 & s2
End Function

La function può essere richiamata in uno dei due modi seguenti:

Public Sub m_1()
    MsgBox f("Ciao")
End Sub

Public Sub m_2()
    MsgBox f("Ciao", " Mauro")
End Sub
 

2 - Gli argomenti obbligatori e quelli opzionali possono essere più di uno. Gli argomenti opzionali devono sempre seguire(essere messi dopo) quelli obbligatori. Ecco come passare alla Function un argomento obbligatorio ed due argomenti opzionali:

 Public Function f(ByVal d1 As Double, Optional ByVal d2 As Double, Optional ByVal d3 As Double) As Double
    f = d1 + d2 + d3
End Function
 

La function può essere richiamata in uno dei seguenti modi:

Public Sub m_1()
    MsgBox f(5)
End Sub

Public Sub m_2()
    MsgBox f(5, 10)
End Sub

Public Sub m_3()
    MsgBox f(5, 10, 100)
End Sub
 

3 - La Function può avere uno o più argomenti tutti opzionali:

 Public Function f(Optional ByVal d1 As Double) As Double
    f = 10 + d1
End Function
 

La function può essere richiamata in uno dei seguenti modi:

Public Sub m_1()
    MsgBox f()
End Sub

Public Sub m_2()
    MsgBox f(5)
End Sub
 

4 - A volte è necessario gestire all'interno della funzione il caso in cui l'argomento opzionale sia stato o meno passato. Ad esempio:

 Public Function f(ByVal d1 As Double, Optional ByVal d2 As Double) As Double
    f = 10 / d2
End Function
 

Darebbe errore(divisione per 0) se richiamata con la Sub m_1() qui sotto, restituendo invece un valore corretto se richiamata con la Sub m_2()

 Public Sub m_1()
    MsgBox f(10)
End Sub

Public Sub m_2()
    MsgBox f(10, 5)
End Sub
 

5 - Ecco un esempio di come gestire un parametro opzionale controllando se contiene un valore. Notare come il tipo assegnato al parametro opzionale *deve essere obbligatoriamente*  in questo caso Variant:

 Public Function f(ByVal d1 As Double, Optional ByVal d2 As Variant) As Double
    If IsMissing(d2) Then
        f = 10
    Else
        f = 10 / d2
    End If
End Function
 

Entrambe le Sub m_1() e m_2() non hanno errore:

 Public Sub m_1()
    MsgBox f(10)
End Sub

Public Sub m_2()
    MsgBox f(10, 5)
End Sub
 

6 - Si potrebbe ovviare all'errore del paragrafo 4 anche definendo un valore di default per il parametro opzionale(tenere conto della particolarità della funzione utilizzata come esempio e adattare ai casi specifici):

Public Function f(ByVal d1 As Double, Optional ByVal d2 As Variant = 1) As Double
    f = 10 / d2
End Function
 

Entrambe le Sub m_1() e m_2() non hanno errore:

 Public Sub m_1()
    MsgBox f(10)
End Sub

Public Sub m_2()
    MsgBox f(10, 5)
End Sub
 

 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: 26/11/2010 - mauro gamberini