Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ListBox sortieren, trotzdem Daten richtig auslesen

ListBox sortieren, trotzdem Daten richtig auslesen
19.05.2008 14:15:00
stefanseevetal
Hallo liebe Experten!
Ich habe folgende Problem:
Ich Lese mit unten angefügtem Code Kontaktdaten aus Outlook in eine (ListBox mit mehreren Spalten) in einem UserForm und lasse die ListBox gleich korrekt sortieren. Wenn ich nun allerdings einen Eintrag in der ListBox markiere und in in eine Zelle einfügen möchte, dann stimmen die Kontaktdaten nicht mit denen der Auswahl überein. Sprich: Ich wähle bspw. "Hans Müller, Musterstraße" in der ListBox aus und eingefügt wird "Werner Schulz, Bahnhofstr.". Mir ist mittlerweile klar, dass sich dieses Problem aus dem Umsortieren ergibt, da die ListBox jeden Kontakt mit einer Indexnummer abspeichert, bevor ich neu sortiere. Aber wie kann ich das nun umgehen? Ich habe ja alle relevanten Daten in dem Array lstEntries gespeichert, nur weiß ich nicht, wie ich sie dort wieder rausbekomme?
Weiß jemand, ob und wie ich einen in der ListBox angeklicken Eintrag ohne den ListIndex (der mir ja das flasche Ergebnis liefert) auslesen kann?
Wenn das gelingt, könnte ich diesen Eintrag (z.B. den Nachnamen) im Array suchen und mir die dazugehörigen Daten (Adresse, etc.) ausgeben lassen.
Oder hat jemand noch andere Ideen, wie ich das realisieren kann, ohne die Kontakte bspw. in einer Tabelle zwischenzuspeichern? Für das Sortieren einer ListBox finde ich im Netz mehrere interessante Hilfen, aber für korekte Auslesen, finde ich leider nichts!
Also, danke für Eure Hilfe und Gruß,
Stefan

Dim arLst() As Variant
Private Sub UserForm_Activate()
Dim objOutApplication As Object
Dim objOutForlder As Object
Dim objOutContact As Object
Dim intIndex As Integer
With ListBox1
.ColumnCount = 10
.ColumnWidths = "200;80;80;80;80;80;80;80;80"
End With
On Error Resume Next
Set objOutApplication = CreateObject(Class:="Outlook.Application")
If Err.Number  0 Then
MsgBox "Outlook kann nicht erstellt werden." & vbLf & vbLf _
& "Programmabbruch", 16, "Fehler"
Exit Sub
End If
Set objOutForlder = objOutApplication.GetNamespace("MAPI"). _
GetDefaultFolder(10)
If Err.Number  0 Then
MsgBox "Kein Zugriff auf Kontaktordner." & vbLf & vbLf _
& "Programmabbruch", 16, "Fehler"
Exit Sub
End If
On Error GoTo 0
On Error GoTo next_item
For intIndex = 1 To objOutForlder.Items.Count
Set objOutContact = objOutForlder.Items(intIndex)
With objOutContact
ListBox1.AddItem .CompanyName
ListBox1.list(ListBox1.ListCount - 1, 0) = .CompanyName
ListBox1.list(ListBox1.ListCount - 1, 1) = .FirstName
ListBox1.list(ListBox1.ListCount - 1, 1) = .Lastname
ListBox1.list(ListBox1.ListCount - 1, 3) = .BusinessAddressCity
ListBox1.list(ListBox1.ListCount - 1, 4) = .BusinessFaxNumber
ListBox1.list(ListBox1.ListCount - 1, 5) = .BusinessTelephoneNumber
ListBox1.list(ListBox1.ListCount - 1, 6) = .FirstName
ListBox1.list(ListBox1.ListCount - 1, 7) = .Lastname
End With
next_item:
Next intIndex
Dim lstEntries() As Variant
ReDim lstEntries(ListBox1.ListCount, 7) As Variant
lstEntries() = ListBox1.list()
Bubblesort lstEntries(), 0, ListBox1.ListCount - 2, 7
lstEntries() = arLst()
ListBox1.list() = lstEntries()
Set objOutContact = Nothing
Set objOutForlder = Nothing
Set objOutApplication = Nothing
End Sub
Function Bubblesort(list() As Variant, ByVal min As Integer, ByVal max As Integer, ByVal iRows  _
As Integer)
Dim done As Boolean
Dim i As Integer, j As Integer
ReDim i_value(iRows) As Variant ' iRows: Anzahl der Spalten ab 0
ReDim arLst(max, iRows) ' iRows: Anzahl der Spalten ab 0
ReDim Preserve list(max + 1, iRows) ' iRows: Anzahl der Spalten ab 0
' Repeat until the list is sorted.
Do
done = True
For i = min + 1 To max
' Compare items i - 1 and i.
If list(i - 1, 0) > list(i, 0) Then
' Swap them.
For j = 0 To 3
i_value(j) = list(i - 1, j)
list(i - 1, j) = list(i, j)
list(i, j) = i_value(j)
Next j
done = False
End If
Next i
Loop Until done
arLst() = list()
End Function



P.S. Denn Code hier habe ich über google gefunden. Er funkioniert super, nur das Auslesen nicht!

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

Betreff
Datum
Anwender
Anzeige
AW: ListBox sortieren, trotzdem Daten richtig auslesen
19.05.2008 14:58:13
Daniel
Hi
nimm doch die Zusätzlichen Datenfelder aus dem Array in die Listbox mit auf, dann werden diese gleich automatisch mitsortiert und du kannst dir das Array sparen und fragst nur noch die Listbox ab.
wenn die Daten in der Listbox nicht angezeigt werden sollen, dann kannst du die Anzeige dadurch unterdrücken, daß du die ColumnWidth-Eingenschaft der entsprecheden Spalte auf 0 setzt.
Ansonsten kannst du den gewählten Namen mit:

=Listbox1.List(Listbox1.Listindex, 2)


abfragen. (das wäre jetzt der Nachname, da hast du glaube ich noch einen Tippfehler im Code, weil du den Vornamen mit dem Nachnamen in der gleichen Spalte überschreibst.)
Gruß, Daniel

Anzeige
AW: Danke
19.05.2008 15:50:00
stefanseevetal
Moin Daniel,
nun sitze ich hier schon ewig vor und seh den Wald vor lauter Bäumen nicht mehr. Warum einfach, wenn es doch auch kompliziert geht ;-) Hab es nun geschnallt und es funktioniert super.
Danke und Gruß, Stefan

AW. Funktioniert doch nicht, Listbox sortieren
19.05.2008 16:02:00
stefanseevetal
Hallo Daniel,
war da eben doch zu vorschnell. Ich möchte die ListBox nach dem Einlesen der Kontakte neu sortieren, weil die nicht automatisch alphabetsich sortiert ist bzw. weil ich später auch nach anderen Kriterien sortieren möchte.
Das Sortieren klappt ja mit dem beschriebenen Cod, aber so oder so, werden die anderen "ListBox-Felder" mit dem Namen, Adresse etc. nicht mitsortiert. Wie kann ich das hinbekommen?
Danke und Gruß,
Stefan

Anzeige
AW: AW. Funktioniert doch nicht, Listbox sortieren
19.05.2008 16:24:00
Daniel
Hi
weiß ich nicht, ich kenne den Code zum Sortien der Listbox nicht.
wahrscheinlich ist irgenwo ne Schleife, die für jede Spalte die Werte mit der benachbarten Zeile tauscht.
die Schleife ist vermutlich noch auf die alte Spaltenanzahl eingestellt und muss angepasst werden.
da du den Code verwendest, solltest du aber wissen, wie das geht (oder zumdest den kennen, der es weiss)
ich würde den Listboxinhalt in eine Tabelle schrieben, dort von Excel sortieren lassen und wieder einlesen.
Gruß, Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige