Clever-Excel-Forum

Normale Version: ComboBox in PublicFunction deklarieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich versuche gerade eine ComboBox in einer UserForm über ein Array zu füllen. Das ganze möchte ich gerne über eine Funktion machen. Ich will also in meinem Modul / meiner UserForm nachher nur noch angeben, welche Combobox gefüllt werden soll. Leider bekomme ich da immer einen Laufzeitfehler 438. - Objekt unterstützt diese Eigenschaft oder Methode nicht!

Wenn ich in meinem Code die ComboBox direkt eingebe, funktioniert alles wunderbar, nur als Variable geht es nicht. Ich habe es jetzt schon mit verschiedenen Deklarationen probiert (String, Object, ComboBox).

Hier die Funktion
Code:
Public Function KategorienFinden(varWorkSheet As String, varSpalteKategorie As Integer, _
                    varUserForm As UserForm, varComboBox As Object) '--- Hier wird die Variable deklariert #########################
'Deklarierung
Dim arrEingabe()    'Array zum einlesen der Gesamten Spalte
Dim arrAusgabe()    'Ausgave Array --> hier stehen nacher nur noch die verschiedenen Kategorien drin

Dim letztezeile As Integer
Dim i As Integer
Dim x As Integer


Dim sizeArray As Integer

'Initialisierung
letztezeile = 1
i = 1
x = 0

letztezeile = Sheets(varWorkSheet).Cells(Rows.Count, 1).End(xlUp).Row  'findet die letzte beschriebene Zeile der Tabelle
sizeArray = letztezeile - 2 'legt die Ursprungsgröße des Arrays fest --> Anzahl der Zeilen minus der Überschrift und für das Array auf 0 gestezt

ReDim arrEingabe(sizeArray) 'legt die größe des Arrays auf die Ursprungsgröße fest
ReDim arrAusgabe(sizeArray) 'legt die größe des Arrays auf die Ursprungsgröße fest

For i = 0 To sizeArray  'schreibt in das Array alle Daten der Spalte (unsortiert, ungefiltert)
    arrEingabe(i) = Sheets(varWorkSheet).Cells(i + 2, varSpalteKategorie)
Next i

funcCall = SortArrayAtoZ(arrEingabe)   'sortiert das Array von A-Z

For i = 0 To sizeArray  'Filtert die Kategorien aus dem Sortierten Array

    If i = 0 Then   'schreibt die erste Zeile des AusgabeArrays mit dem ersten Wert EingabeArrays
        arrAusgabe(0) = arrEingabe(0)
    ElseIf arrEingabe(i) <> arrEingabe(i - 1) Then  'prüft ob die neue Zeile des EingabeArrays sich von der letzten Zeile des eingabeArrays unterscheidet
        x = x + 1                                   ' wenn ja , dannsetze den counter x  auf +1
        arrAusgabe(x) = arrEingabe(i)               'schreibe das EingabeArray in das AusgabeArray
    End If
Next i

'--- Hier tritt der Fehler auf #########################
ReDim Preserve arrAusgabe(x)    'legt die größe des Arrays auf die Anzahl der Kategorien fest
'--- #########################

varUserForm.varComboBox.List = arrAusgabe() 'schreibt die kategorien in eine ComboBox
End Function
Und hier der Aufruf:
Code:
Private Sub CommandButton1_Click()
funcCall = KategorienFinden("Data", 3, UserForm1, ComboBox1)
End Sub


Danke schon mal vorab für die Hilfe
Hallöchen,

so wie es ausschaut gibt Deine Function nix zurück, dann kann auch ... = ... nicht funktionieren.
Hallo,

und welchen Wert hat die Variable x beim Zeitpunkt des Fehlers?
Die Variable x hat den Wert 3 in diesem Beispiel.

Wie gesagt, wenn ich
varUserForm.ComboBox1.List = arrAusgabe() 
statt
varUserForm.varComboBox.List = arrAusgabe() 
schreibe, also die ComboBox direkt anspreche, dann funktioniert es einwandfrei.
Hallöchen,
Dimensioniere oben die Arrays ohne Klammern.
Hallo,
wenn varCombobox bereits ein Objekt ist, dann muss das varUserform vorher wegfallen:
statt varUserForm.varComboBox.List einfach varComboBox.List
Ohne test, sollte aber so sein.
Hallo

Leider hat auch das nicht zum Erfolg geführt!

Dodgy  Ist die ComboBox denn als "Object" richtig Deklariert?
Super das hat Funktioniert! 
Ich verstehe zwar noch nicht ganz warum, da ich außerhalb einer UserFom diese ja immer mit angeben muss. 
Dann müsste ich quasi das "UserForm1.ComboBox1" als eine Variable definieren?