non so se ho capito bene cosa intendi, ma prova a prendere per esempio questa funzione banale:
Function Nominativo(nome As String, cognome As String, Optional secondonome) As String
If Not IsMissing(secondonome) Then
Nominativo = nome & " " & secondonome & " " & cognome
Else
Nominativo = nome & " " & cognome
End If
End Function
ha un parametro opzionale, ma non è importante, quello che è importante è che a prescindere dal numero di parametri, la funzione è richiamabile come una Sub, analogamente al MsgBox, che può essere utilizzato per la restituzione di un valore o no...
la maniera di utilizzo può essere quindi:
come una Sub:
Nominativo "Mario", "Rossi"
o come una Function:
s = Nominativo("Mario", "Rossi", "Andrea")
Spero sia questo quello che intendevi 
TheTruster