Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1292to1296
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Dyn. Comboboxen füllen lassen
09.01.2013 23:45:39
Jörg
Hallo und Guten Abend,
ich habe ein Macro mit dem ich eine combobox
mit einen array befüllen lasse. Hier nun das Macro:
Private Sub ComboBox_fuellen()
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, ALetzte As Long
Dim Letzter As Integer, Naechster As Integer
Dim i As String
Application.ScreenUpdating = False
Worksheets("Simpati-Daten").Activate
ALetzte = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
ComboBox1.AddItem ""
For iRow = 3 To ALetzte
If Not IsEmpty(Cells(iRow, 4)) Then
xKey = Cells(iRow, 4).value
dic(xKey) = 0
End If
Next
For Each xKey In dic
ComboBox1.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
'Call Sortieren
With ComboBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
ComboBox1.ListIndex = 0
Application.ScreenUpdating = True
End Sub

Nun habe ich bis zu 18 Comboxen die eigentlich alle
mit den selbigen Items gefüllt werden soll, komme aber hier nicht weiter.
Kann mir jemand einen kleine Ansatz geben?
Gruß Jörg

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dyn. Comboboxen füllen lassen
10.01.2013 08:50:29
Klaus
Hallo Jörg,
wenn es quick and dirty sein darf und schnell funktionieren muss, lös es so:
Kopier dir den gesamten Code zwischen den Application.Screenupdatings, ersetze in der Kopie jede "ComboBox1" gegen "Combobox2". Wiederhole dies noch 16 mal.
Elegant, effizient oder wartungsfreundlich ist das natürlich nicht. Was du eigenlich brauchst ist eine Codeergänzung im Stil von "For each ComboBox in ComboBoxEs.Count", aber die korrekte Syntax dafür hab ich grad nicht im Kopf. Darum lass ich den Beitrag noch offen.
Grüße,
Klaus M.vdT.

Alle Comboboxen per Schleife befüllen
10.01.2013 09:15:30
NoNet
Hallo Jörg,
wie Klaus bereits angedeutet hat, kannst Du ein zentrales Makro erstellen, das alle ComboBoxen in einer Schleife durchläuft und mit den Werten befüllt.
Hier ein entsprechendes Makro (Dein Makro habe ich geringfügig angepasst) :
Sub ControlsPerSchleife()
Dim cb As Object
For Each cb In Me.Controls
If TypeName(cb) = "ComboBox" Then
ComboBox_fuellen cb
End If
Next
End Sub
Private Sub ComboBox_fuellen(objCB)
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, ALetzte As Long
Dim Letzter As Integer, Naechster As Integer
Dim i As String
Application.ScreenUpdating = False
Worksheets("Simpati-Daten").Activate
ALetzte = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
objCB.AddItem ""
For iRow = 3 To ALetzte
If Not IsEmpty(Cells(iRow, 4)) Then
xKey = Cells(iRow, 4).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
objCB.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
'Call Sortieren
With objCB
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
objCB.ListIndex = 0
Application.ScreenUpdating = True
End Sub
Gruß, NoNet

Anzeige
OT an NoNet: Range("A65536").End(xlUp).Row,
10.01.2013 10:48:31
Klaus
Hi NoNet,
mich wundert, dass du Range("A65536").End(xlUp).Row nicht kommentiert hast ...
Grüße,
Klaus M.vdT.

Manches bin ich manchmal einfach LEID :-( _mT
10.01.2013 11:54:13
NoNet
_oT = "ohne Text" - bzw. _mT = "mit Text" ;-)
PS : Für die, die es interessiert, was Klaus meinte :
Die folgende Codezeile ....
ALetzte = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
...sollte (versionunabhängig) besser so heißen :
ALetzte = IIf(IsEmpty(Cells(Rows.Count,1)), Cells(Rows.Count,1).End(xlUp).Row, Rows.Count)
Salut, NoNet

Anzeige
OT: Kopf hoch, die Welt kann verbessert werden!
10.01.2013 12:03:28
Klaus
Hi NoNet,
zumindest bei mir hast du erreicht, dass die Zahl "65536" aus meinen VBAs verschwunden ist! Ich finds wichtig, diese Kleinigkeiten zu predigen ... aufgrund der Vielzahl der "neuen" User wirds natürlich schnell Gebetsmühlenartig.
Vielleicht sollten wir irgendwo eine Standardseite anlegen, auf der folgendes mit langen Begründungen steht:
- rows.count statt 65536
- auf .select verzichten
- kein reset des Kontextmenüs
- verbundene Zellen .. ahm .. diskussionswürdig :-)
- Liste erweiterbar
Oder hier im Forum mit Textbausteinen arbeiten.
Grüße,
Klaus M.vdT.

Anzeige
AW: OT: Kopf hoch, die Welt kann verbessert werden!
10.01.2013 12:10:43
Jörg
Hallo,
Danke NoNet ich werde es mir merken ;-)
Danke Klaus das war der richtige Ansatz den konnte ich erfolgreich weiter verarbeiten.
Gruß Jörg

Danke für die Rückmeldung! owT.
10.01.2013 12:19:37
Klaus
.

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige