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

Outlook Ordnerauflistung beschleunigen

Outlook Ordnerauflistung beschleunigen
09.01.2021 17:14:40
Oisse
Hallo Zusammen,
mit folgendem Code lese durchsuche ich die einzelnen Outlook Konten, deren Ordner, Unterordner und Anlagen unter "Gesendet" und lasse sie mir in einer Exceltabelle anzeigen.
Das funktioniert einwandfrei.
Allerdings dauert das Durchsuchen sehr lange.
Bitte schaut mal drüber, ob es Potential für Beschleunigung gibt.

Sub OutlookDurchsuchen()
Dim N As Namespace
Dim a As Account
Dim S As Store
Dim F
Dim SF
Dim item
Dim Wert
Dim v, x, y, z As String
Dim b As Long
Dim wkb As Workbook
Dim ws As Worksheet
Set wkb = ThisWorkbook
Set ws = wkb.Worksheets(1)
b = 6
Const SD As String = "send"
Const ST As String = "Sent"
Set N = GetNamespace("MAPI")
'        Debug.Print String(40, "-")
'        Debug.Print "Anzahl accounts: " & N.Accounts.Count
'    For Each A In N.Accounts
'        'Debug.Print A.DisplayName, A.CurrentUser.Name
'    Next
For Each F In N.Folders
For Each SF In F.Folders
i = 1
For Each item In SF.Items
If InStr(SF.Name, SD) > 0 Or InStr(SF.Name, ST) > 0 Then
With ws
On Error Resume Next
.Cells(b, 3) = F.Name
.Cells(b, 4) = SF.Name
.Cells(b, 6) = item
If item.Attachments.Count > 0 Then
.Cells(b, 7) = item.Attachments.item(1).Filename
End If
b = b + 1
End With
End If
Next
For Each SSF In SF.Folders
For Each Wert In SSF.Items
If InStr(SSF.Name, SD) > 0 Or InStr(SSF.Name, ST) > 0 Then
With ws
On Error Resume Next
.Cells(b, 3) = F.Name
.Cells(b, 4) = SF.Name
.Cells(b, 5) = SSF.Name
.Cells(b, 6) = Wert
If item.Attachments.Count > 0 Then
.Cells(b, 7) = Wert.Attachments.item(1).Filename
End If
.Cells(b, 8) = "SF"
b = b + 1
End With
End If
Next
Next
Next
Next
End Sub

L.G.
Oisse

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 17:24:31
mumpel
Wie lange dauert es bei Dir?
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 17:30:03
Oisse
Länger als zwei Minuten
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 17:49:21
Matthias
Moin!
Auf wie viele Einträge kommst du denn nach den 2 Minuten. Damit man mal abschätzen kann, ob es wirklich lang ist. Wo man Zeit sparen könnte, wäre das Eintragen in das Blatt. Das könnte man ggf. in ein Array machen und dann einmal in das Blatt schreiben. Ob das aber soviel Zeit ausmacht, glaube ich fast nicht.
VG
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 18:10:19
Oisse
Hallo Matthias,
also insgesamt mit allen Ordnern, Unterordner und Dateien sind es ca 12000 Einträge.
Mir geht´s auch gar nicht um´s übertragen in eine Exceltabelle. Die dient nur zur Kontrolle, ob alles korrekt aufgelistet ist.
Mir geht es konkret darum, den Namensteil eines Attachments zu lesen und zu vergleichen, um eine Rechnung nicht zweimal zu verschicken.
Weiter unten hatte ich den Tread, wie man Outlook Ordner auslesen kann. Das habe ich alles mit Yal´s Hilfe auch hinbekommen. Auch was das Vergleichen der Anhänge betrifft.
Nur dauert halt das Durchsuchen sehr lange.
Gruß Oisse
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 18:36:45
mumpel
Bei 12.000 Einträgen sind 2 Minuten schon normal.
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 19:02:16
Oisse
Das mag sein,
aber für das Versenden einer Rechnung dennoch zu lang. Oder? Wenn ich in Outlook alle Ordner durchsuche, geht das doch auch schnell. Leider kann man in Outlook keine Makros aufzeichnen. Das wär natürlich super.
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 19:01:37
Oberschlumpf
Hi,
ja, über 10000 Treffer dauert halt!
a) arbeite, wie vorgeschlagen, wirklich nur mit Arrays
b) benutz den Befehl

Application.Screenupdating = False
. Damit schaltest du die Bildschirmaktualisierung erst mal aus. Aktiviere diese aber nach Ablauf des Codes wieder mit

Application.Screenupdating = True
!
c) tja, wenn alles nix hilft - und das is jetzt kein doofer Spruch - kauf dir einen schnelleren Computer
Ciao
Thorsten
Anzeige
Bin jetzt bei 110 Sek
09.01.2021 19:13:25
Oisse
mit deiner Empfehlung und ohne Ausgabe im Tabellenblatt, sondern nur die Suche nach dem Anhang.
Ich bin ja schon froh, dass er den Anhang aus diesen 12000 Dateien findet.
Aber trotzdem zu langsam.
Vielleicht geht´s wirklich nicht schneller.
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 19:48:41
mumpel
Test mal damit: Emails in Excel einlesen
Entpacke die Datei in einen beliebigen Ordner (der Desktop eignet sich m.E. am besten). Bitte die Ordnerstruktur nicht ändern. Vor der ersten Nutzung musst Du die Steuerelemente aus dem gleichnamigen Unterordner installieren, die "MSCOMCT2.OCX" musst Du nur installieren wenn sie bei Dir nicht existiert. Nach der Installation doppelklicken auf "OL_ReadMailItem.exe" (die Exceldatei wird per EXE-Datei gestartet, zuvor muss eine vorhandene Excelinstanz zwingend geschlossen werden). Nach dem Öffnen im Menüband "Emails auslesen" klicken auf "Emails auslesen" in der gleichnamigen Gruppe. In der Userform klicken auf "Ordner/Konten" einlesen. Dann wähle links in der Auswahl einen beliebigen Ordner. Miss mal die Zeit beim Auslesen, mal schauen ob es damit schneller geht.
Anzeige
Nachtrag/Hinweis
09.01.2021 19:50:58
mumpel
Kleiner Hinweis:
Das VBA-Projekt ist gesperrt. Die Quellcodes befinden sich im Unterorder "quellcodes" als HTML-Datei.
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 08:48:02
Oisse
Hallo Mumpel
und danke für die Datei. Funktioniert aber leider nicht. Ich kann sie zwar öffnen, die Buttons sind auch da aber dann kommt der Fehler Pfad nicht gefunden.
Gruß Oisse
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 09:20:01
mumpel
Hast Du auch die Steuerdateien installiert ("sevcmd40" und "sevoutbar4"). Ist auch die "MSCOMCT2.OCX") auf Deinem Rechner vorhanden?). Die musst Du zwingend installieren. "Pfad nicht vorhanden" weisst auf ein Problem in der Userform.
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 10:51:12
Oisse
Also ich habe das alles so gemacht. Es hat auch schon insoweit funktioniert, dass, wenn ich den Button "Emails auslesen" gedrückt habe, ein Formular geöffnet hat. Allerdings erschienen dann aber keine Ordner. Nun kommt das Formular nicht mehr, dafür noch ein Fehler: Automatisierungsfehler, Ausnahmefehler aufgetreten.
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 11:47:11
mumpel
Irgendwas passt da bei Dir nicht. Dann wird es nichts mit dem Testen.
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 11:58:44
Oisse
Hallo Mumpel,
viiielen herzlichen Dank für Deine Hilfe. Auch wenn das bei mir jetzt nicht funktioniert hat.
Ich habe jetzt eine Lösung von Matthias bekommen. Mit der kann ich super leben.
Herzliche Grüße
Oisse
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 17:08:44
mumpel
Ich kann jetzt nurnoch vermuten, dass beim Schließen der UF ein Fehler aufgetreten ist, weshalb die Verbindung zu Outlook nicht ordnungsgemäß getrennt wurde, dadurch kommt es beim nächsten Aufruf zu einem Automatisierungsfehler (da ja bereits eine Verbindung zu Outloom besteht. Aber 15 Sekunden mit dem anderen Code ist schon eine gute Zeit.
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 21:14:02
Oisse
Find ich auch.
Nochmal Dankeschön
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 20:36:18
Matthias
Moin!
Ist jetzt zwar ein wenig Offtopic, da keine Lösung zur eigentlichen Frage. Kenne jetzte deine Outlook Ablagestruktur nicht. Aber wenn du bei jeder Rechnung alles durchsuchst (und es werden ja mehr), wäre es ggf. für die Zukunft vorteilhafter die Ablage anders bzw. feiner zu Gliedern. Bspw. nach Anbieter, Kundennummer etc.. Damit könnte man ggf. gezielter nach eine MAil / Anhang suchen, wenn man weiß an wen es ging oder unter welcher Nummer. Oder du exportierst deine Daten. Evtl. lässt sich das Dateisystem schneller durchsuchen. Das Auslagern kann man auch mit Makros machen.
Sind nur Ideen für die Zukunft.
VG
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
09.01.2021 21:22:23
Matthias
Moin!
Ich muss nochmal was anderes nachfragen. Du hast eingangs geschrieben:
mit folgendem Code lese durchsuche ich die einzelnen Outlook Konten, deren Ordner, Unterordner und Anlagen unter "Gesendet" und lasse sie mir in einer Exceltabelle anzeigen.
Willst du wirklich nur in den Ordnern "Gesendet" schauen oder in allen Ordnern? Dein Code geht derzeit durch alle Ordner (also Posteingang, Kalender - dort alle Einträge, Gelöscht usw.). Wenn es wirklich nur gesendet sein soll, kann man die besser gezielt ansprechen und auch nur die Auswerten. Spart einen Haufen unnötiger Überprüfungen.
UNd dann würde ich im Code was umbauen. Die Beiden Zeilen hier (inkl. der if und for tauscen)
                For Each item In SF.Items
If InStr(SF.Name, SD) > 0 Or InStr(SF.Name, ST) > 0 Then

So gehtst du durch jedes Element und prüfst dann erst, ob im Orndernamen send vorkommt. Da wäre es besser, du prüfst erst, ob du im ORdner mit send bist und prüfst dann die Elemente. Weil wenn kein send vorkommt triffst das für alle Elemente zu. Die ganzen Prüfungen sind damit umsonst.
Das Ganze in der unteren Schleife auch. Erst prüfen, ob der Ordner ein send hat und dann durch die Elemente.
Und ein letzte Gedanken. Wenn das auch nicht zeitlich weniger wird und du wirklich nur die gesendeten Durchsuchen willst, dann nimm zur Not deine Excelmappe als NAchschlagewerk. DAmit kannst du den Eintrag schneller finden und ihn ggf. gezielt ansprechen.
Erstmal würde ich aber den Code umstellen und ggf. nur die Ordner "gesendet" prüfen. Da kann man dann auch helfen.
VG
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 08:33:42
Oisse
Hallo Matthias,
zu Deinen Fragen:
Ja, ich will nur in den "Gesendet" Ordnern schauen. Das Problem ist, dass bei den verschiedenen Konten die "Gesendet" Ordner anders heißen. Mal heißen sie "Gesendet", dann "Gesendete Elemente" oder "Sent Messages". Deshalb suche ich diese Ordner.
Aber wie müsste der Code denn dann aussehen, um nur nach dem Ordner zu suchen und nicht alle Dateien zu durchsuchen. Das hat irgendwie nicht geklappt.
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 08:46:01
Oisse
Hallo Matthias,
zu Deinen Fragen:
Ja, ich will nur in den "Gesendet" Ordnern schauen. Das Problem ist, dass bei den verschiedenen Konten die "Gesendet" Ordner anders heißen. Mal heißen sie "Gesendet", dann "Gesendete Elemente" oder "Sent Messages". Deshalb suche ich diese Ordner.
Aber wie müsste der Code denn dann aussehen, um nur nach dem Ordner zu suchen und nicht alle Dateien zu durchsuchen. Das hat irgendwie nicht geklappt.
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 11:46:48
Matthias
Moin!
Also habe mal deinen Code umgebaut. Habe das mit den Arrays mit integriert. DAbei habe ich mal 30000 Zeilen abgeschätzt. Wenn es mal mehr werden, die Zahl einfach erhöhen. Lässt sich so leichter programmieren, als es immer dynamisch anzupassen. Zudem habe ich deinen Variablen mal noch ein paar andere Namen gegeben, damit man gleich erkennt, wo man sich gerade im OL Baum befindet und auch ein paar Kommentare hinzugefügt. Also OL steht für Outlook. Dabei ist mir eins aufgefallen. Du gehtst erst durch alle Hauptordern (also EIngang, Ausgang, Kalender etc.) und schaust nach dem Ordner mit dem Textbaustein "send". In der zweiten Schleifen gehst du dann nochmal durch alle Hauptordner und schaust in die Unterordner, ob da einer dabei ist, der den Textbaustein "send" beinhaltet. Das heißt natürlich, dass du da auch im Ordner Eingang, Kalender etc. nach einem Unterordner suchst. Da sollten doch aber nie gesendete Unterordner abgelegt sein. Ich habe das deshalb mal so gedeutet, dass du im Hauptordner mit den gesendeten noch nach Unterordnern schaust (zumindest zur Tiefe von 1.). Falls das anders gemeint war, könnte man das wieder umändern.
Der Code sieht jetzt so aus:

Sub OutlookDurchsuchen()
Dim OLZugang As Namespace
Dim Konto
Dim Hauptordner, Unterordner
Dim Nachricht
Dim wkb As Workbook
Dim ws As Worksheet
Dim ergebnis(1 To 30000, 1 To 5)        'hier mal großflächig abschätzen
Dim zeile As Long
Set wkb = ThisWorkbook
Set ws = wkb.Worksheets(1)
Const SD As String = "send"
Const ST As String = "Sent"
zeile = 0
Set OLZugang = GetNamespace("MAPI")     'Zugang zu Outlook
For Each Konto In OLZugang.Folders  'Konten bzw. Accounts
For Each Hauptordner In Konto.Folders   'die Hauptordner im Konto
'durch alle Hauptordner und schauen, ob send beinhaltet ist
'wenn ja, dann den Ordner auswerten
If InStr(Hauptordner.Name, SD) > 0 Or InStr(Hauptordner.Name, ST) > 0 Then
'jetzt sollten wir in den gesendeten sein
'1. durch alle Nachrichten gehen
For Each Nachricht In Hauptordner.Items
zeile = zeile + 1
On Error Resume Next
ergebnis(zeile, 1) = Konto.Name
ergebnis(zeile, 2) = Hauptordner.Name
ergebnis(zeile, 4) = Nachricht
If Nachricht.Attachments.Count > 0 Then
ergebnis(zeile, 5) = Nachricht.Attachments.item(1).Filename
End If
Next    'Nachricht
'? ich durchsuche hier die Unterordner im Ordner gesendet - wie auch imme er heiß _
t
' das ist ein Unterschied zur Suche in jedem Hauptordner, ob da ein Ordner gesendet  _
ist
'2. jetzt noch die Unterordner dort durchschauen
'geht so aber nur im Ordner gesendet, ansonsten muss das vor die IF Schelife
For Each Unterordner In Hauptordner.Folders
'Nachrichten durchgehen
For Each Nachricht In Hauptordner.Items
zeile = zeile + 1
On Error Resume Next
ergebnis(zeile, 1) = Konto.Name
ergebnis(zeile, 2) = Hauptordner.Name
ergebnis(zeile, 3) = Unterordner.Name
ergebnis(zeile, 4) = Nachricht
If Nachricht.Attachments.Count > 0 Then
ergebnis(zeile, 5) = Nachricht.Attachments.item(1).Filename
End If
Next    'Nachricht
Next 'Unterordner
End If
Next    ' Hauptordner
Next    'Account, Konto
On Error GoTo 0
'jetzt das Ergebnis eintragen
ws.Range("C3").Resize(zeile, 5) = ergebnis
End Sub

Da das ja so ähnlich ist, wie ein direkter Zugriff auf den Ordner gesendete habe ich deinen Code gelassen und das mit dem if getauscht. Vllt. poste ich gleich mal noch einen Code mit direktem Zugriff. Bin mir da aber nicht sicher, ob OL das erkennt, wenn der Name anders ist.
Einfach mal testen.
Achja, weiß nicht, ob die Beiträge von Mumpel noch gesehen hast. Der hat sich da auch viel Arbeit gemacht. Kannst du ja auch mal testen und ausprobieren.
VG
Anzeige
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 11:57:07
Oisse
Absolut klasse.
Ich hatte auch noch rumprobiert und kam auf 25 Sekunden. Aber dein Code läuft unter 15 Sekunden.
Ich weiß das wirklich sehr, sehr zu schätzen, weil ich weiß, wieviel Mühe ihr euch gebt.
Das von Mumpel habe ich ausprobiert. Siehe Tread.
Vielen herzlichen Dank !!!!
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 12:02:04
Matthias
Moin!
Nochmal ich. Jetzt hier mal eine Variante mit Zugriff auf den Ordner gesendete. Wie geschrieben, weiß nicht,ob das klappt, wenn die anderen Namen haben. Im Code vorhin fehlte übrigens noch das mit dem Application.screenupdating . DAs ggf. noch ergänzen. Code ist so in der Variante nicht getestet. Hatte das nur vorher mit einem direkten OL erstellt.
Sub ol_gesendete_suchen()
Dim OLZugang As Namespace
Dim konten, konto, gesendet, nachricht
Dim zeile As Long
Dim ergebnis(1 To 30000, 1 To 5)
Application.ScreenUpdating = False
zeile = 1
Set OLZugang = GetNamespace("MAPI")
Set konten = OLZugang.Session.Stores
For Each konto In konten
'hier wird direkt auf den Ordner gesendete zugegriffen
Set gesendet = konto.GetDefaultFolder(5)
For Each nachricht In gesendet.ITEMS
ergebnis(zeile, 1) = konto
ergebnis(zeile, 2) = gesendet
ergebnis(zeile, 4) = nachricht
If nachricht.attachments.Count > 0 Then
For Each anhang In nachricht.attachments
Set temp = anhang
ergebnis(zeile, 5) = temp.Filename
Exit For
Next
End If
zeile = zeile + 1
Next
For Each Unterordner In gesendet.Folders
For Each nachricht In Unterordner.ITEMS
ergebnis(zeile, 1) = konto
ergebnis(zeile, 2) = gesendet
ergebnis(zeile, 3) = Unterordner
ergebnis(zeile, 4) = nachricht
If nachricht.attachments.Count > 0 Then
For Each anhang In nachricht.attachments
Set temp = anhang
ergebnis(zeile, 5) = temp.Filename
Exit For
Next
End If
zeile = zeile + 1
Next
Next
Next
Worksheets(1).Range("C3").Resize(zeile, 5) = ergebnis
Application.ScreenUpdating = True
End Sub

VG
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 12:42:07
Oisse
Hier:

Set gesendet = konto.GetDefaultFolder(5)

kommt die Fehlermeldung:
Ein Objekt wurde nicht gefunden.
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 17:01:13
Firmus
Hallo Oisse,
mit Session.Store liest du alle Speicher(Stores) von Outlook aus.
Da sind auch alle offenen PST-Dateien mit dabei.
.GetDefaultFolder(5) gibt es aber nur bei echten Konten(Accounts).
Echte Konten sind u. a. an der Filepath-Länge zu erkennen.
Vor dem Set gesendet = konto.GetDefaultFolder(5) muss also noch entschieden werden.
If Len(konto.FilePath) > 0 Then .... ist es eine PST-Datei, also auslassen.
oder
If Len(konto.FilePath) = 0 Then .... ist es ein Account, also auslesen.

Gruss,
Firmus
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 17:11:47
Firmus
noch weiter nachgesehen:
Die bessere Abfrage ist aber

If konto.IsDataFileStore = True Then ist es eine PST-Datei.

Gruss,
Firmus
AW: Outlook Ordnerauflistung beschleunigen
10.01.2021 21:16:26
Oisse
Hallo Firmus,
danke für die Infos. :-)
Gruß Oisse

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige