VBA Combobox leere Zeilen nicht anzeigen?


04.01.2021, 13:32

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

Vom Beitragsersteller als hilfreich ausgezeichnet
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)

Woher ich das weiß:Berufserfahrung – Administrator mit über 12 Jahren Berufserfahrung

RobinM66 
Beitragsersteller
 04.01.2021, 13:47

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?

1
Krabat693  04.01.2021, 13:48
@RobinM66

indem du vor der schleife erstmal die liste löschst. das geht mit

combobox.clear

2
RobinM66 
Beitragsersteller
 04.01.2021, 13:53
@Krabat693

das sieht sehr gut aus, danke. Ich werde es nochmal etwas durchtesten aber es scheint zu funktionieren.

1

ggf einmal mit "" probieren.

Bsp:

If Sheets("XY").Cells(i,12) <>"" then
....
end if


RobinM66 
Beitragsersteller
 01.01.2021, 16:22

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

1
adi120369  01.01.2021, 16:32
@RobinM66

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"

1
RobinM66 
Beitragsersteller
 01.01.2021, 16:51
@adi120369

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

1
RobinM66 
Beitragsersteller
 01.01.2021, 16:55
@adi120369

gerade festgestellt: Die Liste aktualisiert sich nur, wenn ich im Skript zurücksetze. Dann sind die neuen Werte auch in der Combobox

1