Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1496to1500
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

Listbox mit Bedingungen befüllen

Listbox mit Bedingungen befüllen
15.06.2016 22:29:54
silex1
Hallo,
https://www.herber.de/bbs/user/106274.xlsm
in der Bsp.-Datei gibt es eine Listbox und den zugehörigen Code, welcher Kontakte aus Outlook ausliest und diese dort auflistet.
Leider ist scrollen bei 3000 Kontakten etwas mühsam.
Kann mir bitte jemand behilflich sein und den Code so anpassen, dass ein "Suchbegriff" in der Textbox eingegeben werden kann (sei es mayer, Mayer oder nur ma bzw. Ma) und es werden in der Listbox nur alle Kontakte aufgelistet, welche den Suchbegriff/das Suchfragment enthalten (Vergleich soll nur mit Spalte 1 der Listbox erfolgen).
Wer mir helfen möchte, bitte in der Datei den VBA Verweisen noch auf "Outlook Library" setzen (Hab an diesem LT kein OL und ich musste den Verweis löschen, da er mein Druckmakro behinderte. Daher bitte selber noch setzen zum testen, ich kann dies an meinem LT nicht mehr setzen, is wech, nicht mehr auswählbar...ohne OL verständlich)
Mit dankbaren Grüßen
René

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit Bedingungen befüllen
16.06.2016 09:37:15
Beverly
Hi René,
soll das mit der Vorauswahl aus der TextBox VOR dem Füllen der ListBox aus Outlook passieren, oder wenn die ListBox bereits gefüllt wurde?
Falls vor dem Füllen der ListBox - ich würde denken, dass man es nach diesem Prinzip lösen könnte (ich kann es nicht testen, weil mein Outlook keine entsprechenden Daten enthält)
        With MyConItem
If Mid(.CompanyName, 1, Len(TextBox1.Value)) = TextBox1.Value Then
'Neuen Eintrag in Listbox einfügen
Me.ListBox1.AddItem " "
'ListIndex - 1 um auf das vorher erzeugte Item zuzugreifen
'On Error GoTo conError
Me.ListBox1.List(MyOutId - 1, 0) = .CompanyName
'Statusbar Information anzeigen
'um den Benutzer den Fortschritt anzuzeigen
Application.StatusBar = "Datensatz " & MyOutId & " von " & MyOutFolder.Items. _
Count & " wird gelesen: " & .FirstName
Me.ListBox1.List(MyOutId - 1, 1) = .BusinessAddressPostalCode & " " & . _
BusinessAddressCity
Me.ListBox1.List(MyOutId - 1, 2) = .BusinessAddressStreet
Me.ListBox1.List(MyOutId - 1, 3) = .BusinessTelephoneNumber
Me.ListBox1.List(MyOutId - 1, 4) = .BusinessFaxNumber
Me.ListBox1.List(MyOutId - 1, 5) = .MobileTelephoneNumber
Me.ListBox1.List(MyOutId - 1, 6) = .Email1Address
End If
ErrorStepin:
End With



Anzeige
AW: Listbox mit Bedingungen befüllen
16.06.2016 16:08:17
silex1
Hallo Karin,
vielen lieben Dank für Deine Hilfe. Da Du richtig bemerkt hast, dass bei keinem Eintrag einer Firma die Zeile leer wäre, habe ich noch einen Zusatz eingebaut. Nun wird die Firma, wenn vorhanden, ausgefüllt und wenn nicht vorhanden, dann der Vorname und Nachname. Somit müsste es ggf. nun auch bei Dir laufen und dies wollte ich eh schon so einarbeiten. Sieht jetzt auch bei mir nicht so leer aus.
With MyConItem
If Mid(.CompanyName, 1, Len(TextBox1.Value)) = TextBox1.Value Then
'Neuen Eintrag in Listbox einfügen
Me.ListBox1.AddItem " "
'ListIndex - 1 um auf das vorher erzeugte Item zuzugreifen
'On Error GoTo conError
If .CompanyName = "" Then
Me.ListBox1.List(MyOutId - 1, 0) = .FirstName & " " & .LastName
Else
Me.ListBox1.List(MyOutId - 1, 0) = .CompanyName
End If
'Statusbar Information anzeigen
'um den Benutzer den Fortschritt anzuzeigen
Application.StatusBar = "Datensatz " & MyOutId & " von " & MyOutFolder.Items.Count & _
" wird gelesen: " & .FirstName
Me.ListBox1.List(MyOutId - 1, 1) = .BusinessAddressPostalCode & " " & . _
BusinessAddressCity
Me.ListBox1.List(MyOutId - 1, 2) = .BusinessAddressStreet
Me.ListBox1.List(MyOutId - 1, 3) = .BusinessTelephoneNumber
Me.ListBox1.List(MyOutId - 1, 4) = .BusinessFaxNumber
Me.ListBox1.List(MyOutId - 1, 5) = .MobileTelephoneNumber
Me.ListBox1.List(MyOutId - 1, 6) = .Email1Address
End If
ErrorStepin:
End With
Wenn ich Text eintrage ins Feld, dann scheint etwas zu laufen, jedoch wird nichts eingetragen in die Listbox. Lasse ich das Feld leer, dann werden alle Kontakte eingelesen.
Schön wäre, wenn vor dem Einlesen alles aussortiert werden könnte, was nicht das Suchkriterium enthält.
Also z.B. bei "Sch" im Feld müsse alles mit Sch gefunden werden (Schmidt, Hansch, Hauscher...).
Falls es einfacher ist, die Liste nach dem Einlesen auszudünnen, dann wäre mir dies auch recht.
Hauptsache es müssen nicht alle 1000te Kontakte durchgescrollt werden, denn man sucht sich sonst "dumm und dä....).
Vielen Dank Dir schon mal für Deine Hilfe.
Mit dankbaren Grüßen
René

Anzeige
AW: Listbox mit Bedingungen befüllen
16.06.2016 18:54:42
Beverly
Hi René,
mit dieser Codezeile
If Mid(.CompanyName, 1, Len(TextBox1.Value)) = TextBox1.Value Then

werden nur die Teile am Beginn angesprochen. Wenn du generell nach einer Buchstabenkombination suchen willst, musst man Instr verwenden (ist enthalten).
Es muss also unterschieden werden, ob ein Firmenname vorhanden ist oder nicht, aber auf eine etwas andere Weise, denn der Code würde ja nur in den If-Zweig gehen, wenn der TextBox-Inhalt im Firmennamen enthalten ist. Man muss also zuerst prüfen, ob der Firmenname vorhanden ist, und wenn ja, danach ob der TextBox-Inhalt im Firmennamen enthalten. Ist kein Firmenname vorhanden, dann muss geschaut werden, ob der TextBox-Inhalt im Vornamen oder im Nachnamen enthalten ist.
Der Code muss aber noch etwas abgewandelt werden: den Zähler MyOutID kann nicht verwendet werden, da dieser ja davon ausging, dass alle Einträge übernommen werden. Jetzt sind es aber nur ausgewählte und stattdessen bezieht man sich auf die Anzahl an bereits vorhandenen Einträgen in der ListBox (ListBox.ListCount).
Damit der Code für das Eintragen der 2. bis 6. Spalte nicht doppelt geschrieben werden muss (jeweils für den Teil Firmenname und den Teil für Vor-/Nachname), kann man das mit einer Boolschen Variablen etwas "abkürzen" und diese Spalten nur füllen wenn tatsächlich ein neuer Eintrag gemacht wurde.
Private Sub CommandButton1_Click()
'(C) by Ramses
'Verweis auf die Outlook Library muss gesetzt sein
'Variablen Deklaration
Dim MyOutId As Integer
Dim MyOutFolder As Object
Dim MyOutApp As Object
Dim MyConItem As Object
Dim Qe As Integer
Dim ErrMsg As String
Dim blnEintragen As Boolean
'Bildschirmaktualisierung ausschalten
'Application.DisplayAlerts = False
'... und Statusbar-Info ausgeben
Application.StatusBar = " die Adressen werden aus Outlook geholt " _
& " - das kann einen Moment dauern."
'Object Deklaration
Set MyOutApp = CreateObject("Outlook.Application")
'Zugriff auf die MAPI Schnittstelle
Set MyOutFolder = MyOutApp.GetNamespace("MAPI").GetDefaultFolder(10)
'Zuweisen der Anzahl Spalten in der Listbox
Me.ListBox1.ColumnCount = 6
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox1.ColumnWidths = "200;100;80;80;80;100"
Me.ListBox1.Clear
'Einlesen der Daten
For MyOutId = 1 To MyOutFolder.Items.Count
'Zuweisen des Object für jeden Contact
Set MyConItem = MyOutFolder.Items(MyOutId)
'Einlesen des Contacts beginnen
With MyConItem
'On Error GoTo conError
' Firmenname ist vorhanden
If .CompanyName  "" Then
' TextBox-Inhalt ist im Firmennamen enthalten
If InStr(.CompanyName, TextBox1.Value) > 0 Then
'Neuen Eintrag in Listbox einfügen
Me.ListBox1.AddItem " "
'ListIndex - 1 um auf das vorher erzeugte Item zuzugreifen
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 0) = .CompanyName
blnEintragen = True
End If
Else
' TextBox-Inhalt ist im Vornamen oder Nachnamen enthalten
If InStr(.FirstName, TextBox1.Value) > 0 Or InStr(.LastName, TextBox1.Value) >  _
0 Then
'Neuen Eintrag in Listbox einfügen
Me.ListBox1.AddItem " "
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 0) = .FirstName & " " & . _
LastName
blnEintragen = True
End If
End If
' es wurde ein Eintrag in die ListBox vorgenommen, dann restliche Daten eintragen
If blnEintragen Then
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .BusinessAddressPostalCode & "  _
" & . _
BusinessAddressCity
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .BusinessAddressStreet
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .BusinessTelephoneNumber
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .BusinessFaxNumber
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .MobileTelephoneNumber
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = .Email1Address
End If
' Variable wieder in den Ausgangszustand für nächsten Schleifendurchlauf
blnEintragen = False
'Statusbar Information anzeigen
'um den Benutzer den Fortschritt anzuzeigen
Application.StatusBar = "Datensatz " & MyOutId & " von " & MyOutFolder.Items.Count & _
_
" wird gelesen: " & .FirstName
ErrorStepin:
End With
Next MyOutId
ErrorExit:
'Object Variablen leeren
Set MyConItem = Nothing
Set MyOutFolder = Nothing
Set MyOutApp = Nothing
'Bildschirm einschalten
Application.DisplayAlerts = True
'Statusbar zurücksetzen
Application.StatusBar = False
Exit Sub
conError:
Select Case Err
Case 438
'Es kann sein, dass ein Datensatz korrupt ist, aber in Outlook korrekt angezeigt  _
wird
'Allerdings können diese Datensätze nicht mit externen Geräte synchronisiert werden
Set MyConItem = MyOutFolder.Items(MyOutId)
ErrMsg = "Datensatz " & MyOutId & " ist korrupt, oder unterstützt die Abfrage nicht. _
ErrMsg = ErrMsg & vbCrLf & "Datensatzkennung:"
ErrMsg = ErrMsg & vbCrLf & "Erstelldatum: " & MyConItem.CreationTime
ErrMsg = ErrMsg & vbCrLf & "ObjectID" & MyConItem.EntryID
ErrMsg = ErrMsg & vbCrLf
ErrMsg = ErrMsg & vbCrLf & "Löschen ? "
Qe = MsgBox(ErrMsg, vbYesNo + vbCritical + vbDefaultButton2, "Datenfehler")
If Qe = vbYes Then
MyConItem.Delete
MsgBox ("Datensatz " & MyOutId & " wurde gelöscht")
'Listenzählung korrigieren
MyOutId = MyOutId + 1
Me.ListBox1.ListIndex(MyOutId).Delete
Resume ErrorStepin
Else
MsgBox "Datenimport wegen Datenfehler bei Datensatz " & MyOutId & " abgebrochen" _
Resume ErrorExit
End If
Case Else
MsgBox Err & ": " & Err.Description
Resume ErrorExit
End Select
End Sub



Anzeige
AW: Listbox mit Bedingungen befüllen
16.06.2016 21:44:49
silex1
Hallo Karin,
hab Deinen Beitrag gerade gelesen und bin begeistert von Deiner Hilfe und Erläuterung. Damit wird mein VBA Verständnis erweitert.
Leider sitze ich wieder vor dem nicht-OL-Rechner (daheeme) und kann daher Deinen Code erst morgen live testen. Aber auf den ersten Blick und anhand Deiner Erläuterungen, wird er dass machen, was ich mir vorgestellt hatte. Da bin ich mir sicher.;-)
Ich melde mich morgen nochmals und danke Dir jetzt schon von ganzem Herzen, dass Du mir da so behilflich bist.
Mit dankbaren Grüßen
René

AW: Listbox mit Bedingungen befüllen
17.06.2016 18:32:31
silex1
Hallo Karin,
vielen vielen Dank. Deine Anpassungen laufen perfekt. Sogar mit einem ungewollten Zusatz um so perfekter, denn die Groß- und Kleinschreibung wird beachtet, was bei der Suche dann ungemein hilfreicher ist, da nicht alle Kontakte z.B. mit "sch" aufgelistet werden (Schule nicht, aber Muschel schon ;-)). Super, vielen vielen Dank!
Und beim nächsten XL-Treffen, gibt es am ersten Abend Essen und Trinken frei für Dich.
Denn Du hast mir bei einem mir unlösbarem Problem mega geholfen!
Mit sehr sehr dankbaren Grüßen
René

Anzeige
AW: Listbox mit Bedingungen befüllen
17.06.2016 19:24:30
Beverly
Hi René,
ich werde dich beim Wort nehmen. :D


Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige