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.

ComboBox in PublicFunction deklarieren
#1
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
Antworten Top
#2
Hallöchen,

so wie es ausschaut gibt Deine Function nix zurück, dann kann auch ... = ... nicht funktionieren.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo,

und welchen Wert hat die Variable x beim Zeitpunkt des Fehlers?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#4
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.
Antworten Top
#5
Hallöchen,
Dimensioniere oben die Arrays ohne Klammern.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
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.
Gruß der AlteDresdner (Win11, Off2021)
Antworten Top
#7
Hallo

Leider hat auch das nicht zum Erfolg geführt!

Dodgy  Ist die ComboBox denn als "Object" richtig Deklariert?
Antworten Top
#8
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?
Antworten Top


Gehe zu:


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