Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
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
Inhaltsverzeichnis

Code auf 5 ListBoxes ausweiten - Wie?

Code auf 5 ListBoxes ausweiten - Wie?
Wolfgang
Hallo,
den nachstehenden Code erhielt ich hier aus dem Forum. Er sortiert in ListBox1 die Einträge alphabetisch und zeigt sie entsprechend in der Listbox an. Gibt es eine Möglichkeit, dass alle ListBoxes 1-5 jeweils auch Spalte A:E alphabetisch sortiert werden könnten. Wie müßte ich den Code abändern?
Danke schon jetzt für die Rückmeldungen.
Gruß - Wolfgang

Option Explicit
Public Function UniqueList(Matrix As Range, Optional VisibleCellsOnly As Boolean = True,  _
Optional IncludeNull As Boolean = True, Optional Sorted As Boolean = True) As Variant
Dim objDic As Object, rng As Range, varTmp() As Variant, vntExclude As Variant
Set objDic = CreateObject("Scripting.Dictionary")
vntExclude = IIf(IncludeNull, "", 0)
If VisibleCellsOnly Then Set Matrix = Matrix.SpecialCells(xlCellTypeVisible)
For Each rng In Matrix.Cells
If rng.Value  vntExclude Then objDic(rng.Value) = 0
Next
varTmp = objDic.keys
If Sorted Then QuickSort varTmp
UniqueList = varTmp
Set objDic = Nothing
End Function
Private Sub QuickSort(data() As Variant, Optional UG, Optional OG)
Dim P1&, P2&, T1 As Variant, T2 As Variant
UG = IIf(IsMissing(UG), LBound(data), UG)
OG = IIf(IsMissing(OG), UBound(data), OG)
P1 = UG
P2 = OG
T1 = data((P1 + P2) / 2)
Do
Do While (data(P1)  T1)
P2 = P2 - 1
Loop
If P1  P2)
If UG 
With Worksheets("Maßnahmen")
vntList = UniqueList(.Range("A2:A" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)))
AW: Code auf 5 ListBoxes ausweiten - Wie?
02.10.2011 18:49:33
Josef

Hallo Wolfgang
so?

Private Sub Workbook_Open()
  Dim vntList As Variant, lngLast As Long
  
  With Worksheets("Maßnahmen")
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    vntList = UniqueList(.Range("A2:A" & lngLast))
    .ListBox1.List = vntList
    vntList = UniqueList(.Range("B2:B" & lngLast))
    .ListBox2.List = vntList
    vntList = UniqueList(.Range("C2:C" & lngLast))
    .ListBox3.List = vntList
    vntList = UniqueList(.Range("D2:D" & lngLast))
    .ListBox4.List = vntList
    vntList = UniqueList(.Range("E2:E" & lngLast))
    .ListBox5.List = vntList
  End With
  
End Sub



« Gruß Sepp »

Anzeige
AW: Code auf 5 ListBoxes ausweiten - Wie?
02.10.2011 19:16:08
Wolfgang
Hallo Josef,
recht herzlichen Dank für Deine Rückmeldung. Irgendetwas mache ich verkehrt. Nach Änderung bzw. Ergänzung des vorhandenen Codes bekam ich nichts mehr angezeigt. Ich habe eine Beispielsmappe angehängt. Vielleicht entdeckst Du da evtl. meinen Fehler. Danke schon jetzt wieder für Deine Rückantwort.
Gruß - Wolfgang
https://www.herber.de/bbs/user/76839.xlsm
AW: Code auf 5 ListBoxes ausweiten - Wie?
02.10.2011 19:32:16
Josef

Hallo Wolfgang, und/oder Klaus-Dieter,
du hast ja auch keine List- sondern Combo-Boxen.
Außerdem stehen die auf einem anderen Blatt.

Private Sub Workbook_Open()
  Dim vntList As Variant, lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  With Worksheets("Maßnahmen")
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    vntList = UniqueList(.Range("A2:A" & lngLast))
    Worksheets("Einstellungen").ComboBox1.List = vntList
    vntList = UniqueList(.Range("B2:B" & lngLast))
    Worksheets("Einstellungen").ComboBox2.List = vntList
    vntList = UniqueList(.Range("C2:C" & lngLast))
    Worksheets("Einstellungen").ComboBox3.List = vntList
    vntList = UniqueList(.Range("D2:D" & lngLast))
    Worksheets("Einstellungen").ComboBox4.List = vntList
    vntList = UniqueList(.Range("E2:E" & lngLast))
    Worksheets("Einstellungen").ComboBox5.List = vntList
  End With
  
  With Worksheets("Einstellungen").ComboBox2.List
    .Activate
    .Range("A1").Select
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
End Sub



« Gruß Sepp »

Anzeige
AW: Code auf 5 ListBoxes ausweiten - Wie?
02.10.2011 19:48:59
Wolfgang
Hallo Josef,
die ursprüngliche Datei stammt von einem Klaus-Dieter, so dass der Name wohl noch in Dateieigenschaften erscheint. Ich habe Deine Änderungen soweit "einbauen" können, so dass nun der Text aus den jeweiligen Spalten wieder erscheint. In der ComboBox1 sortiert der Code auch weiterhin alphabetisch, in den weiteren ComboBoxes noch nicht. Habe ich evtl. etwas übersehen oder müßte ich noch erwas ändern?
Danke und Gruß
Wolfgang
AW: Code auf 5 ListBoxes ausweiten - Wie?
02.10.2011 19:52:09
Josef

Hallo Wolfgang,
kann ich nicht nachvollziehen, bei mir wird in allen Combos sortiert.

« Gruß Sepp »

Anzeige
Kleiner Tipp noch ...
02.10.2011 20:02:50
Matthias
Hallo
Soll nur ein Tipp sein!
Genau wie Sepp hatte ich das auch entdeckt mit der falschen Controlbezeichnung.
Nur war Sepp eben schneller!
Allerdings gibts da noch mehr Sachen die Du anpassen solltest
Klick mal sofort nach dem Öffnen der Datei auf zurücksetzen (ohne vorher eine Box zu füllen!)
Desweiteren würde ich, wenn Du schon mit "Scripting.Dictionary" arbeitest,
das auch konsequenter durchziehen!
Gib doch mal in Box1 Argentinien ein. Warum zeigst Du dann 3x Buenos Aires?
Es reicht doch 1x
Denn genau das macht ja das Scripting.Dictionary-Object (Unikate sammeln)
Übrigens auch bei mir sind die Combos alle sortiert
Gruß Matthias
Anzeige
AW: Kleiner Tipp noch ...
02.10.2011 20:23:39
Wolfgang
Hallo Matthias,
auch Dir herzlichen Dank für Deine Rückmeldung. Mir fehlt momentan der Blick. Die Sortierung ab ComboBox2 nimmt der Code bei mir nicht vor. Steht die ComboBox1 z.B. auf Deutschland, dann steht in der Box2 zunächst Berlin, Mannheim, Aachen etc. - so wie ich das sehe, also weiterhin ein Abbild der Spalte B. Scripting.Dictionary müßte ich wie fortsetzen (den Code hatte mir Josef zur Verfügung gestellt)? Bei Betätigen der Schaltfläche zurücksetzen ergab sich eine Fehlermeldung und der Debugger sprang auf .Autofilter - das habe ich nun erst einmal herausgenommen. Werde noch weiterhin versuchen und testen.
Danke und Gruß - Wolfgang
Anzeige
Das mußt Du ja nicht gleich rausnehmen
02.10.2011 20:53:26
Matthias
Hallo
Du kannst den Fehler ja auch abfangen
Hier eine Variante:

Private Sub CommandButton1_Click()
If Application.WorksheetFunction.CountA(Columns(1)) > 0 Then
Application.ScreenUpdating = False
With Sheets("Einstellungen").Range("$A$14:$H$100")
.AutoFilter
.Clear
End With
ComboBox1.Value = ""
ComboBox1.ListIndex = -1
ComboBox2.Clear
ComboBox3.Clear
ComboBox3.Clear
ComboBox5.Clear
Application.ScreenUpdating = True
End If
End Sub
wg. Mehrfachanzeige
Übrigens ist das nicht nur bei Argentinie so sondern z.B. auch bei Mexico
5x México D.F. (und 1x reicht)
wg der Sortierung in Combobox2
Du löschst die Daten ja mit
ComboBox2.Clear
ComboBox3.Clear
ComboBox4.Clear
ComboBox5.Clear

Clear entfernt alle Objekte aus einem Objekt oder einer Auflistung.
Du liest dann die Daten ja mit AddItem neu ein und im ComboBox1_Change-Code
wird ja nicht sortiert!
Gruß Matthias
Anzeige
AW: Kleiner Tipp noch ...
02.10.2011 21:04:14
Josef

Hallo Wolfgang,
vielleicht solltest du zuerst einmal beschreiben, was du genau erreichen willst. Reicht den der "normale" Autofilter nicht? Bei kaum vorhandenen Kenntnissen bringst du das doch selber nur schwer auf die Reihe und wenn es jemand für dich erstellt, kannst du es nicht anpassen bzw. pflegen.

« Gruß Sepp »

Anzeige
AW: Kleiner Tipp noch ...
02.10.2011 21:37:27
Wolfgang
Hallo Josef,
erreichen würde ich gerne, dass die ComboBoxes aus den Daten der Tabelle "Maßnahmen" (ausgeblendet) befüllt werden und die gefilterten Datensätze in Tabelle "Einstellungen" ab A14 (inc. Überschrift) eingefügt werden. Soweit funktioniert es ja auch. Ergänzend wäre nun schön, wenn die Ergebnisse innerhalb der Textboxes alphabetisch angezeigt würden und so wie Matthias es ja beschrieb, nicht doppelt. Im Grunde funktioniert ja die Excel-Mappe auch soweit, die Sortierung wäre noch eine schöne "Verfeinerung". Muß ich evtl. in der Excel-Anwendung selbst noch etwas einstellen/verändern? Ich habe m.E. Deine Ergänzungen jeweils dorthin kopiert, wie Du es beschrieben hattest.
Danke und Gruß
Wolfgang
Anzeige
AW: Kleiner Tipp noch ...
02.10.2011 21:41:33
Josef

Hallo Wolfgang,
dazu musst du halt statt die Combos jeweils mit .AddItem zu befüllen, die Funktion "UniqueList" anwenden.

« Gruß Sepp »

Danke Josef und Matthias
03.10.2011 12:01:48
Wolfgang
Hallo Josef und Matthias,
ich habe noch verschiedene Ansätze versucht, u.a. auch Deinen letztgenannten, Josef. - Mir ist nun auch klar geworden, wo der "Bock" liegt. Ich habe zunächst direkt immer schon gefiltert, ohne mir die ComboBoxes einzeln anzuschauen. Stimmt also, ohne jegliche Filterungen werden die Einträge alphabetisch sortiert. Filtere ich die Hauptkategorie z.B. auf Deutschland, dann funzt die Sortierung nicht mehr. Werde die Vorschläge von euch noch versuchen, weiter umzusetzen, so dass es dann klappen dürfte.
Danke nochmals recht herzlich für eure Zeit und Geduld und die Ausarbeitungen/Vorschläge.
Gruß - Wolfgang
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige