Clever-Excel-Forum

Normale Version: Funktionsaufruf liefert "Argument ist nicht optional"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo alle,
ich bin neu hier und ein absoluter Excel-Anfänger. Ich hab Erfahrungen in Java und C, aber die bringen mich leider nicht weiter. Ich möchte gerne die Auswahlmöglichkeiten für eine Combobox setzen. Dabei sollen die Auswahlmöglichkeiten als Collection von einer Funktion kommen (die Funktion werde ich wahrscheinlich häufiger aufrufen). Der Code sieht so aus:

Code:
Private Sub UserForm_Initialize()
   Dim list As Collection
   list = getAllListelements()
   Dim x As Variant
   For Each x In list
       ComboBox1.AddItem x
   Next
End Sub

Function getAllListelements()
   Dim result As Collection
   result.Add ("a")
   result.Add ("b")
   result.Add ("c")
   getAllAssemblys = result
End Function

Dabei scheint allerdings die Zeile "list = getAllListelements()" den Fehler "Argument ist nicht optional" hervorzurufen. Dabei erwartet getAllListelements aber doch gar keine Argumente. Auch wenn ich ein Placebo-Parameter mitgebe, bleibt die Fehlermeldung.

Ich bin ein wenig ratlos, und hab das Gefühl, ich such an der falschen Stelle. Wenn mir jemand helfen könnte, wäre das echt super.
Liebe Grüße,
Nugat
Hallo Nugat,

1. List ist ein VBA-Schlüsselwort für List- und Comboboxen. Nimm einen anderen Variablennamen.
2. Die Funktion getAllListelements gibt nichts zurück,  da getAllAssemblys = result steht.

Gruß Uwe
Hallöchen,

da sind verschiedene Probleme im Code. Zur Collection gehört ein Set. Einen Wert zu einer Collection bekommst Du nur über Add rein, nicht über = Funktion. Daher schlag ich dieses Konstrukt vor:

Code:
Private Sub UserForm_Initialize()
    Dim list  As Collection
    Set list = New Collection
    getAllListelements list
    Dim x As Variant
    For Each x In list
        ComboBox1.AddItem x
    Next
End Sub

Function getAllListelements(list As Collection)
    list.Add "a"
    list.Add ("b")
    list.Add ("c")
End Function
Hallo Uwe,

das mit dem result sollte im allgemeinen schon klappen. Problem ist die Übergabe der Collection.

Code:
Sub test()
MsgBox ttip
End Sub

Function ttip()
result = 1
ttip = result
End Function
Vielen Dank André,
deine Lösung funktioniert für mich. Das einzige was ich etwas merkwürdig finde ist, das wenn ich "getAllListelements list" durch "getAllListelements (list)" ersetze, bekommt ich wieder "Argument ist nicht optional".
"ComboBox1.AddItem (x)" scheint aber valide zu sein. Naja, mir ist fürs erste geholfen, ohne Klammer gehts ja.
LG Nugat