Wenn ich solch eine Variabilität benötige, definiere ich für den "optionalen" Parameter einen Wert, der dann intern in der Routine mit dem Defaultwert übersetzt wird (z.B. wenn leer, dann Default). Der Parameter muss natürlich übergeben werden (bei erwarteten positiven Zahlen könnte ich einen negativen Wert dazu nutzen, um den Defaultwert anzusprechen).
Wenn es ganz flexibel sein soll, nehme ich nur einen Parameter (Variant) und übergebe eine Liste. Innerhalb der Routine kann ich dann das Vorhandensein von Parametern überprüfen.
z.B.
Dim liste List As String
liste ("Ort") = "Oslo"
liste ("Strasse") = "Karl Johans gate"
liste ("Hausnummer") = "1"
Call MeineFunktion (liste)
...
Sub MeineFunktion (liste As Variant)
If Iselement (liste ("Ort")) Then
-> Ort verwenden
Else
-> Defaultwert für Ort
...