VBA Combobox leere Zeilen nicht anzeigen?
Guten Tag zusammen,
ich habe eine Combobox, dessen Inhalt aus einem gewissen Bereich angezeigt werden soll. Jedoch möchte ich, dass in der Liste keine leeren Zellen angezeigt werden.
Infos:
Bereich: Blatt XY Range L3-102
Name ComboBox: KAnzeigename
Name UserForm: Schreiben
Es läuft unter "Private Sub UserForm_Initialize()". Die leeren Zellen (formatiert als Standard) aus dem Bereich L3-L102 laufen über eine Wenn-Funktion mit dem Ergebnis = ""
Wo ist den denn Fehler?
Sind es aufgrund der Wenn-Funktion keine leeren Zellen mehr?
Dim i As Long
With Schreiben.KAnzeigename
For i = 3 To 102
If Not IsEmpty(Sheets("XY").Cells(i, 12)) Then
.AddItem Sheets("XY").Cells(i, 12)
End If
Next
End With
Vielen Dank und Gruß
Das o.g. Problem hat sich größtenteils erledigt. Mit dem folgendem Code wird nun der Inhalt aus der Liste ohne leere Zellen in der Combobox angezeigt:
Dim i As Long
With Schreiben.KAnzeigename
For i = 3 To 102
If Sheets("XY).Cells(i, 12) <> "" Then
.AddItem Sheets("XY").Cells(i, 12)
End If
Next
End With
Jedoch werden neue Inhalte nicht in der Combobox aufgenommen. Auch nach dem schließen / erneutem öffnen nicht. Erst wenn ich das Skript zurücksetze und dann die Combobox öffne, werden die neuen Inhalte mit angezeigt.
Kann die Box auch direkt beim öffnen aktualisiert werden?
2 Antworten
Kann die Box auch direkt beim öffnen aktualisiert werden?
ja dafür muss der Code aber nicht in Userform_Initialize sondern in Userform_Activate. dann wird dein Code jedes mal ausgeführt wenn das Formular auf aktiv gesetzt wird. (unter anderem auch wenn du das Userform in den Hintergrund setzt und zurück in den Vordergrund holst)
Initialize hingegen wird nur einmal ausgeführt wenn das Userform generiert wird
wenn du deine Userform zum beispiel mit me.hide beendest wird diese nicht aus dem speicher entfernt und existiert noch solange dein Makro ausgeführt wird. erst mit einem unload me wird die userform richtig beendet (und bei erneutem ausführen würde ein initialize stattfinden)
das sieht sehr gut aus, danke. Ich werde es nochmal etwas durchtesten aber es scheint zu funktionieren.
ggf einmal mit "" probieren.
Bsp:
If Sheets("XY").Cells(i,12) <>"" then
....
end if
Ich habe es jetzt mal wie folgt getestet:
With Sheets("XY")
For Each Cell In .Range("L3:L102")
If Not Cell.Text = "" Then
KAnzeigename.AddItem Cell.Text
End If
Next
End With
Hierbei hat es anfangs funktioniert, aber nachdem ich die nächste leere Zeile beschrieben habe, wurde diese nach erneutem öffnen des UserForm und der Combobox nicht angezeigt mit angezeigt...
@ adi120369
Also wie gesagt - ich würde es einmal so testen, wie ich es vorgeschlagen habe. Die Standardeigenschaft der Cell ist Value. Dies frage ich ja ab - .Text kann sich unterscheiden.
Ferner ist es bei erneutem Öffnen der Userform wichtig, wie die vorher geschlossen wurde. Wenn man die einfach mit UserForm.hide schliesst, bleiben alle Objekte gefüllt. Besser nach dem Schliessen auch noch "Set UserFormName=Nothing"
Ich habe es mal über die If-Abfrage laufen lassen und lasse nach dem schließen des UserForm (.hide) auch "Set UserFormName=Nothing" laufen. Jedoch wird die Liste nicht in der Combobox aktualisiert, nachdem neue Sachen eingetragen wurden sind
gerade festgestellt: Die Liste aktualisiert sich nur, wenn ich im Skript zurücksetze. Dann sind die neuen Werte auch in der Combobox
Wenn ich es aber unter Userform_Activate setze, wird jedes mal die bestehende Liste um die Liste erweitert. Sprich nach dem fünften mal öffnen habe ich fünf mal die selbe Liste unterienander in der Combobox. Wie kann ich dies verhindern?