Erledigt Office VBA-Projekt zum Speichern von OL-Mails auf HDD --> 64bit Office

SkAvEnGeR

Master of Tools
Script zum Speichern von Outlook-Emails auf der Festplatte

Unter folgender Adresse gibt es eine Anleitung und ein vorgefertigtes Script, um Mails aus Outlook gezielt zu Archivieren, Dabei wird der Name der Mails aus Informationen wie Sender Empfänger Betreff und Datum generiert. So abgespeichert hat man die Mails dann ausserhalb von Outlook auf der Platte und kann sie projektbezogen einsortieren.
http://sw-guide.de/microsoft-outlook/script-zum-speichern-von-outlook-emails-auf-der-festplatte/

Ich nutze dieses Script in etwas angepasster Form schon einige Jahre und es hat bisher immer wunderbar funktioniert.
Nun habe ich leider ein Office in 64bit auf einem PC und da funktioniert dieses VBA-Script nicht mehr.
Es muss der Quellcode des VBA-Projektes an 64bit angepasst werden.
Leider kenne ich mich mit VBA rein gar nicht aus.

Daher die Frage: Könnte jemand das von mir angehänte Script nach 64bit umschreiben?

Danke im Voraus!
 

Anhänge

  • ExportEmail.bas.TXT
    14,1 KB · Aufrufe: 187

chaospir8

★★★★★-Oldie
Leichte off-topic-Frage @SkAvEnGeR:
Gibt es einen trifitgen Grund, warum auf diesem Rechner die 64bit-Version von Office Anwendung findet? Du kannst ja nichts dafür, aber es würde mich einfach interessieren.
 

SkAvEnGeR

Master of Tools
DANKE @vlintstoun + @RichyZuHause : Dort findet sich ja genau das Script, das ich suche. SUPER :yo - Nun muss ich das Script nur wieder ein bisschen an meine Bedürfnisse anpassen und dann sollte es laufen.

@chaospir8 : Der blöde quasi-Admin hat beim Download des Installers von der Office-Website offensichtlich nicht aufgepasst und wohl "versehentlich" die 64-Variante geladen und installiert. Ich konnte das Problem dort erstmal so lösen, dass ich die bestehende Office 64bit deinstalliert und direkt nach dem obligatorischen Neustart die gleiche Office in 32bit installiert habe. Hat einwandfrei funktioniert und die Outlook-Profile und Einstellungen wurden direkt übernommen. UND das "alte" ExportMailtoDisk" funktioniert dort nun auch wieder. Ich hatte aber trotzdem hier nach einer 64bit-Variante des Scripts gefragt, falls mir dieser Fall mal wieder unter kommt.
 

SkAvEnGeR

Master of Tools
Für Alle, die ein ähnliches Script suchen - hier das fertige Script für ein 64bit Office.
 

Anhänge

  • ExportEmailtoDisk-x64.txt
    18,2 KB · Aufrufe: 276

Zwiesel88#

Mitglied
Hallo zusammen,
ich bin neu hier und hätte direkt mal eine Frage zum obengenannten Script. Ich hatte das Tool immer genutzt bis das neue Office 2013 kam.
Nun bekomme ich es zwar eingebunden, allerdings geschieht bei der Betätigung der Schaltfläche nichts.

Habt Ihr da eine Idee wie ich dieses Tool wieder nutzen kann?
Vielen Dank vorab und allen einen schönen Tag.
 

dr_tommi

alter Oldie
Hallo Zwiesel.
Was heißt bei Dir "eingebunden"?
Das Skript oben bietet ja von sich aus keinen Button an.
Von sich aus nicht.
Aber Outlook kann Makros direkt einbinden.
Optionen->Menüband anpassen-> Neue Gruppe->Makro der Gruppe zuweisen

Allerdings passiert trotzdem tatsächlich nichts, weil mindestens ein Syntaxfehler angezeigt wird.
Zumindest mein Outlook konnte mit der ersten Zeile des Scriptes nichts anfangen.
Und danach kommt noch die Auswahl des Verzeichnisses und dann verabschiedet sich mein Outlook.
Wenn man umkonfiguriert auf festes Verzeichnis, dann wird korrekt abgespeichert.
 
Zuletzt bearbeitet:

Zwiesel88#

Mitglied
Hallo RichyZuHause es ist genau so wie dr_tommi geschrieben hat. Man muss das Makro im Menüband zuweisen.
Hmm leider habe ich nicht wirklich Ahnung von der Makro Codierung. Ich sehe da nur lauter ????…
Bei mir tut sich gar nichts wenn ich auf den Button klicke.
Kann das ggf. jemand mit wenigen Handgriffen anpassen das es beim Outlook 2013 wieder funktioniert?

Vielen Dank schon mal an alle
 

RichyZuHause

Alter mit Ego
Allerdings passiert trotzdem tatsächlich nichts, weil mindestens ein Syntaxfehler angezeigt wird.
Zumindest mein Outlook konnte mit der ersten Zeile des Scriptes nichts anfangen.
Und danach kommt noch die Auswahl des Verzeichnisses und dann verabschiedet sich mein Outlook.
Wenn man umkonfiguriert auf festes Verzeichnis, dann wird korrekt abgespeichert.
Ich vermute den Syntax-Fehler, wenn Du manuell im VBA-Projekt ein Modul anlegst und dann den Code von oben reinkopierst.
Dann steht da
Code:
Attribute VB_Name = "ExportEmail"
Wenn Du dagegen die Quelle importierst, gibt es den Syntaxfehler nicht, dann führt die erste Zeile nur dazu, dass das Modul "ExportEmail" heißt.
Und wird nicht dargestellt.

Der Absturz danach kommt auf jeden Fall. 😵

Wenn man diese Stelle im Makro
Code:
With udtBI
        .lpszTitle = lstrcpyA(EXM_016, "")
        .ulFlags = BFFM_INITIALIZED
End With
so ändert:
Code:
With udtBI
        .lpszTitle = EXM_016
        .ulFlags = BFFM_INITIALIZED
End With
funktioniert es.

Ich würde allerdings wie DrTommi umstellen von der freien Ordnerauswahl mit Dialog auf die feste Einstellung eines Ablagepfades.
Also dies hier:
Code:
Private Const EXM_OPT_USEBROWSER As Boolean = True
Private Const EXM_OPT_TARGETFOLDER As String = "D:\"
ändern in:
Code:
Private Const EXM_OPT_USEBROWSER As Boolean = False
Private Const EXM_OPT_TARGETFOLDER As String = "D:\BackupOutlookMails"

Läuft.
 

RichyZuHause

Alter mit Ego
Bei mir tut sich gar nichts wenn ich auf den Button klicke.
Kann das ggf. jemand mit wenigen Handgriffen anpassen das es beim Outlook 2013 wieder funktioniert?
Kann es sein, dass Dein Outlook so eingestellt ist, dass es keine Makros ausführen darf?
Datei -> Optionen -> Sicherheitscenter -> Einstellungen für das Sicherheitscenter -> Einstellungen für Makros -> passende Option wählen.
 

dr_tommi

alter Oldie
ich habe gerade mal ein paar Mails gespeichert.
Dabei ist mir aufgefallen, dass wenn am gleichen Tag mehrere Mails mit gleichem Betreff vom gleichen Absender kommen, diese nicht gespeichert werden.
Um das zu umgehen sollte man eventuell das Datum zu Beginn des Dateinamens um die Uhrzeit erweitern.
Denn dass diese Mails auch noch in der gleichen Sekunde ankommen ist eher selten. ( Von z.B. automatisch verschickten Meldungen einer Serverüberwachung mal abgesehen)
Also
Code:
'Date format of filename
Private Const EXM_OPT_FILENAME_DATEFORMAT As String = "yymmdd"
ändern in:
Code:
'Date format of filename
Private Const EXM_OPT_FILENAME_DATEFORMAT As String = "yymmddhhnnss"
 

Zwiesel88#

Mitglied
Guten Morgen zusammen,
erstmal muss ich sagen Ihr sei ja super Motiviert. Danke dafür. Leider bekomme ich das Tool einfach nicht Ausgeführt.
Eingebungen habe ich es, es ist auch im Menüband ersichtlich aber Ausführen lässt es sich nicht.
Makros werden auch zugelassen.
Ich weiß nicht vielleicht habe ich auch was im Code versaut?! könnt Ihr mir nochmal den kompletten überarbeiteten Quelltext zur Verfügung stellen?
Vielen Dank vorab.
 

dr_tommi

alter Oldie
@Zwiesel88#
Wenn du mindestens eine Mail markierst und dann das Makro ausführen lässt müsste doch zumindest eine Fehlermeldung kommen.
Ich habe dir mal meine Version angehängt, die aktuell so läuft.
Änderungen bei mir:
  • Dateiname am Anfang "yymmddhhnn", also Datum mit Uhrzeit
  • Speicherung der Mails im Ordner "d:\ol-files" ohne Abfrage des Verzeichnisses
 

Anhänge

  • exportmails.txt
    18,1 KB · Aufrufe: 73

SkAvEnGeR

Master of Tools
'Ich freue mich, dass ihr die 64bit-Bersion des Scriptes lauffähig habt....
Aber mit festem Speicherort.
Gerade DAS ist mit der wichtigste Bestandteil - für mich!
Ich muss Mails projektbezogen in passende Ordner exportieren können.
Somit ist der Auswahldialog für mich unerlässlich.

Könnte man das Script nicht auch noch so "reparieren", dass der Auswahldialiog wieder funktioniert?
 

dr_tommi

alter Oldie
Könnte man das Script nicht auch noch so "reparieren", dass der Auswahldialiog wieder funktioniert?
Natürlich kann man das versuchen, aber nicht mal eben so in 2 Minuten. ;)

Edit:
Ich hab das jetzt soweit dass zumindest der Ordner gewählt werden kann und auch gespeichert wird.
Nur leider weiß ich im Moment noch nicht wo gespeichert wird. Im gewählten Ordner zumindest nicht. ;)
 
Zuletzt bearbeitet:

dr_tommi

alter Oldie
Könnte man das Script nicht auch noch so "reparieren", dass der Auswahldialiog wieder funktioniert?
Man kann und man hat. ;)
Im Anhang das angepasste Script.
Getestet mit der 64Bit-Version vom Outlook aus dem M365-Abo
Aktuelle Einstellungen (können natürlich geändert werden)
  • Dateiformat TXT
  • Dateiname setzt sich aus Datum, Betreff und Empfänger zusammen
  • Datum für Dateiname yy-mm-dd_hhmm also etwa 20-07-14_1906
  • Auswahl des Speicherortes über Dialog
Rückmeldungen erwünscht
 

Anhänge

  • eportmails2drive.txt
    12,8 KB · Aufrufe: 109
Zuletzt bearbeitet:

Zwiesel88#

Mitglied
Hallo zusammen, ich habe nochmal eine Frage das Tool funktioniert bei mir jetzt perfekt! Nochmal danke dafür!
Jetzt haben manche E-Mails einen zu langen Betreff welches zu Problemen beim Export führt da ja jetzt noch das Datum usw. davor gesetzt wird. Welches ich aber auch benötige.
Anbei ein Screenshot der Fehlermeldung (es liegt definitiv an der länge des betreffs ich habe es getestet) ....evtl. kann man dieses Problem durch eine Umschreibung im Quelltext lösen!?

Vielen Dank vorab
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    15 KB · Aufrufe: 63

dr_tommi

alter Oldie
Hallo zusammen, ich habe nochmal eine Frage das Tool funktioniert bei mir jetzt perfekt! Nochmal danke dafür!
Jetzt haben manche E-Mails einen zu langen Betreff welches zu Problemen beim Export führt da ja jetzt noch das Datum usw. davor gesetzt wird. Welches ich aber auch benötige.
Anbei ein Screenshot der Fehlermeldung (es liegt definitiv an der länge des betreffs ich habe es getestet) ....evtl. kann man dieses Problem durch eine Umschreibung im Quelltext lösen!?
Natürlich kann man den Dateinamen bzw. den Betreff begrenzen.
Wie lang soll/darf er denn sein?
 

SkAvEnGeR

Master of Tools
Vielen Dank @dr_tommi für die schnelle Umsetzung. :icon_prost:
Hier in der Firma haben wir aktuell überall "nur" die 32bit Version von Office installiert. Daher kann ich es nicht mal so eben testen.

Das werde ich dann @home machen, nachdem ich mein Testsystem neu aufgesetzt habe 🙄
 

dr_tommi

alter Oldie
Jetzt haben manche E-Mails einen zu langen Betreff welches zu Problemen beim Export führt da ja jetzt noch das Datum usw. davor gesetzt wird. Welches ich aber auch benötige.
Anbei ein Screenshot der Fehlermeldung (es liegt definitiv an der länge des betreffs ich habe es getestet) ....evtl. kann man dieses Problem durch eine Umschreibung im Quelltext lösen!?
Das Script prüft schon von sich aus ob der Dateiname größer als 251 Zeichen wird. Wenn ja, wird auf 251 gekürzt.

Code:
strFinalFileName = IIf(Len(strFinalFileName) > 251, Left(strFinalFileName, 251), strFinalFileName)
    strFullPath = strBackupPath & "\" & strFinalFileName
Dazu kommt aber noch das Verzeichnis.

Wenn das jetzt insgesamt zu lang werden sollte, kann man an dieser Stelle die 251 ersetzen gegen eine kleinere Zahl, z.B. 240.
 

DrWaldfee

Neues Mitglied
Hi Leute!

Richtig gut, dass ihr das zum Laufen gebracht habt. Hut ab und danke für eure Arbeit!
Ich hätte noch eine Anregung dazu. Könnte man auch einen Dateiauswahldialog einbinden, in den man einen Ordnerpfad in ein Textfeld kopieren kann, wie auf folgendem Bild und den letztgenutzen Ordner dort dann als "Standardordner" festlegen?




Mir ist gerade noch eine Kleinigkeit aufgefallen.
Und zwar scheint das Script nicht mit kleinen "s" im Emailtitel klarzukommen. Das heißt, wo im Titel ein kleines s vorkommt, entsteht im Dateinamen der gespeicherten Email eine Lücke. Ist das bei euch auch der Fall?
 
Zuletzt bearbeitet:

dr_tommi

alter Oldie
Hi Leute!

Richtig gut, dass ihr das zum Laufen gebracht habt. Hut ab und danke für eure Arbeit!
Ich hätte noch eine Anregung dazu. Könnte man auch einen Dateiauswahldialog einbinden, in den man einen Ordnerpfad in ein Textfeld kopieren kann, wie auf folgendem Bild und den letztgenutzen Ordner dort dann als "Standardordner" festlegen?
Der Dialog aus dem Bild ist der Dialog für die Dateiauswahl. Im Script wird aber nur die Verzeichnisauswahl genutzt. Da gibt es kein Feld wo man einen Pfad reinkopieren kann.
Natürlich könnte man das umbauen.
Den letzten Pfad speichern und dann wieder benutzen würde auch gehen. Dann allerdings entweder in Registry oder on einer Ini-Datei.

Mir ist gerade noch eine Kleinigkeit aufgefallen.
Und zwar scheint das Script nicht mit kleinen "s" im Emailtitel klarzukommen. Das heißt, wo im Titel ein kleines s vorkommt, entsteht im Dateinamen der gespeicherten Email eine Lücke. Ist das bei euch auch der Fall?
Das ist komisch, das war damals nicht der Fall. ich schau mal woran das liegen kann.
 

dr_tommi

alter Oldie
Cool, woran lag es?
Ein Regex-Problem.
ist
Code:
Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:s|Re:s|AW:s|FW:s|WG:s|SV:s|Antwort:s"

Soll
Code:
Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:\s|Re:\s|AW:\s|FW:\s|WG:\s|SV:\s|Antwort:\s"

und
Ist
Code:
    'Replace multiple chars by 1 char
    objRegExp.Pattern = "s+"
Soll
Code:
    'Replace multiple chars by 1 char
    objRegExp.Pattern = "\s+"
Nach diesen Änderungen funktioniert es auch wieder mit den kleinen "s" im Betreff.
Der Hintergrund ist folgender.
Eigentlich sollte per Regex mehrfache Leerzeichen und die Leerzeichen nach den Antwortkennungen ( RE: AW: usw.) entfernt werden.
Nun wird aber bei Regex \s als "Space" genommen. Warum da nur "s" drinstand ist mir unklar.
Es könnte aber sein, dass früher die Regex-Bibliotheksfunktion das anders bearbeitet hat.
 

RichyZuHause

Alter mit Ego
Ein Regex-Problem.
Code:
Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:s|Re:s|AW:s|FW:s|WG:s|SV:s|Antwort:s"
Code:
Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:\s|Re:\s|AW:\s|FW:\s|WG:\s|SV:\s|Antwort:\s"

Die Erklärung von Tommi ist richtig.
Seltsamerweise war der Code in der ursprünglichen Lösung von Michael Wöhrer aus dem Jahre 2009 schon mal richtig.
Original-Auszug:
Code:
Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:\s|Re:\s|AW:\s|FW:\s|WG:\s|SV:\s|Antwort:\s"

Das Problem mit dem Ordner-Dialog und der der separaten Inputbox für den Pfad löst man in VBA normalerweise etwa so (mit Application.FileDialog):
Code:
With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Zielverzeichnis"                'Fenstertitel
        .ButtonName = "Order wählen"              'Button Beschriftung
        .InitialFileName = "D:\Download\"         'Startverzeichnis
         If .Show = -1 Then                       ' if OK is pressed
            OrdnerName = .SelectedItems(1)
        End If
 End With
Funkioniert auch.
In Excel.
Aber nicht in Outlook, wie ich feststellen musste.

Bin gespannt auf Tommis Lösungsidee.
 
Oben Unten