maurogsc.eu
|
![]() |
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