Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Funktionsaufruf liefert "Argument ist nicht optional"
#1
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
Antworten Top
#2
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
Antworten Top
#3
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Nugat
Antworten Top
#4
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste