Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
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

ActiveX-ComboBox; einmalige Einträge & sortieren

ActiveX-ComboBox; einmalige Einträge & sortieren
06.08.2015 15:34:01
Scoopa
Hallo,
ich habe ein Modul gefunden, welches beim Öffnen meiner Excel-Datei eine ActiveX-ComboBox mit Werten aus einem definierten Bereich füllt (ohne die leeren Zellen mit aufzunehmen).
Bisheriger Code:
Sub Auto_open()
With Sheets("Kalender")
Dim Zelle As Range
.ComboBox1.Clear
With ActiveSheet
For Each Zelle In .Range(.Range("R7"), .Range("S738").End(xlDown))
If Zelle.Value  "" Then .ComboBox1.AddItem Zelle.Value
Next
End With
End With
End Sub
Ich würde die Einträge dieser ComboBox jetzt gerne noch alphanumerisch sortieren lassen und redundante Einträge nicht mit aufnehmen. Leider fehlt mir die Zeit und Muße, um tiefer in die VBA-Programmierung einzusteigen. Daher hoffe ich auf einen Profi, für den diese Problemstellung ein leichtes ist! ;)
P.S.: Innerhalb des Bereichs (R7:S738) gibts es im Schnitt nur ~50 Einträge, von daher wäre die Performance der Sortierung nicht ausschlaggebend.
Grüße,
Scoopa

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveX-ComboBox; einmalige Einträge & sortieren
06.08.2015 15:54:21
Sepp
Hallo Scoopa,
Auto_open wird eigentl. nicht mehr verwendet! Statt dessen verwendet man das Ereignis Workbook_Open().
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
Dim vntList As Variant

With ActiveSheet
  vntList = .Range("R7:S738")
  vntList = toArraySorted(vntList)
End With
With Sheets("Kalender").ComboBox1
  .Clear
  .List = vntList
End With
End Sub


Private Function toArraySorted(Field As Variant, Optional Uniqe As Boolean = True) As Variant
Dim objArrayList As Object
Dim lngR As Long, lngC As Long

On Error GoTo ErrExit

Set objArrayList = CreateObject("System.Collections.Arraylist")

With objArrayList
  For lngR = LBound(Field, 1) To UBound(Field, 1)
    For lngC = LBound(Field, 2) To UBound(Field, 2)
      If Not .Contains(Field(lngR, lngC)) Or Not Uniqe Then
        If Field(lngR, lngC) <> "" Then .Add Field(lngR, lngC)
      End If
    Next
  Next
  .Sort
  toArraySorted = .toArray
End With

Exit Function
ErrExit:
toArraySorted = -1
End Function


Gruß Sepp

Anzeige
AW: ActiveX-ComboBox; einmalige Einträge & sortieren
07.08.2015 09:53:32
Scoopa
Hallo Sepp,
vielen Dank für die superschnelle Hilfe, läuft einwandrei! :)
Grüße,
Scoopa

AW: ActiveX-ComboBox; einmalige Einträge & sortieren
11.08.2015 09:56:59
Scoopa
Leider läuft die Funktion doch nicht so einwandfrei wie anfangs gedacht.
Solange in dem zu sortierenden Bereich alle Einträge entweder mit Buchstaben ODER Zahlen beginnen, funktioniert die Sortierung tadellos. Sobald jedoch Einträge mit Buchstaben UND Zahlen beginnen, bekomme ich den "Laufzeitfehler 381: Eigenschaft List konnte nicht gesetzt werden. Index des Eigenschaftsfeldes ungültig."
Ich nehme an, dass die Sort-Methode Probleme mit der Sortierung verschiedenartiger Zeichenketten hat?!
Beispiel: Die Einträge "abc" und "123" im zu sortierenden Bereich produzieren bereits die Fehlermeldung.
Gibt es eine Möglichkeit, um jegliche Kombinationen von Zeichen zu sortieren?

Anzeige
AW: ActiveX-ComboBox; einmalige Einträge & sortieren
11.08.2015 13:41:33
Scoopa
Nachtrag: Ursache des Problems war meine Unaufmerksamkeit, - die Zellen waren noch als "Standard" formatiert; als "Text" formatiert funktioniert es wie vorgesehen. :)
Grüße,
Scoopa

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige