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

dr_tommi

alter Oldie
Ich habe bei der Installation 32bit gewählt, weil es durch verschiedene Plugins immer mal wieder Probleme mit der 64bit Version gab/gibt.
Selbst MS empfielt die Verwendung der 32bit Version - da habe ich mich mal dran gehalten :p
Das mit den Plugins kann ich nachvollziehen.
Die Empfehlung von Microsoft zu 32-Bit ist aber schon etliche Versionen her und nach meinem Kenntnisstand nicht mehr notwendig.
Und eigentlich verwenden wir ja gar keine DLL-Aufrufe mehr, die einen Unterschied machen würden.

Die Frage ist aber ob bei dir einer der aufgeführten Gründe zutrifft?
Dann könnte man versuchen, die Parameter in einem anderen Ordner zu speichern.
 

SkAvEnGeR

Master of Tools
Die Frage ist aber ob bei dir einer der aufgeführten Gründe zutrifft?
Welche aufgeführten Gründe?

Auf meinem privaten PC habe ich keine Anwendungen, die PlugIns in OL einbinden.
Im Büro - wo ich bereits die UrVersion des Scripts einsetze - laufen alle Kisten mit Office 2019 32bit, weil es dort eben diverse Programme gibt, die sich als AddIn einnisten.
 

dr_tommi

alter Oldie
Die Frage ist aber ob bei dir einer der aufgeführten Gründe zutrifft?
Welche aufgeführten Gründe?
Ich meinte die hier:
Die Meldung dürfte eigentlich nur kommen wenn einer der folgenden Gründe vorliegt:
  • Der Ordner ist ein öffentlicher Exchange-Ordner, ein IMAP-Ordner (Internet Message Access Protocol), MSN Hotmail- oder Microsoft SharePoint Foundation-Ordner.
  • Die Benutzerberechtigung für den Ordner ist schreibgeschützt.
  • Ausgeblendete Elemente werden vom Informationsdienst nicht unterstützt.
Wenn dein erstes Konto also ein IMAP-Konto oder Hotmail-Konto ist, kann diese Meldung kommen, weil dann im Posteingang keine versteckten Einträge gespeichert werden dürfen.
An dem Rechner wo ich da entwickelt und getestet habe, sind die ersten beiden Konten O365.
Ich teste gerade mal an einem Zweitrechner ob es für IMAP-Konten einen anderen Ordner gibt, den wir verwenden können.
 

SkAvEnGeR

Master of Tools
Mein erster Eintrag in der Ordnerliste ist die Outlook-Datendatei.
Danach kommen 3 IMAP-Konten.
POP3 kommt für mich nicht in Frage.
 

Eric_Lehrer

Mitglied
Bei mir läuft der Code auch unter Office 365 32 bit, funktioniert hier einwandfrei.

Eine Sache ist mir bei der Benutzung noch aufgefallen, wäre nichts zwingendes aber "nice to have": In manchen Fällen wäre es hilfreich, vor dem Abspeichern der Email den erzeugten Dateinamen nochmals manuell anpassen zu können.

Habe allerdings keine Idee, wie das umzusetzen wäre, evtl. mit msoFileDialogSaveAs?
 

RichyZuHause

Alter mit Ego
"nice to have": In manchen Fällen wäre es hilfreich, vor dem Abspeichern der Email den erzeugten Dateinamen nochmals manuell anpassen zu können.
Das geht ganz sicher.
Vergeht sich damit aber an der Effizienz: Es sind dann IMMER mehr Klicks notwendig, auch wenn man das nur selten braucht.
Braucht man es aber oft, ist meist eine Regel (wenn auch im Geiste) im Spiel.
Die könnte man dann sinnvoll implementieren.

Wir beachten hier ein bekanntes Entwicklungsmuster:
Aus einer simplen Anfrage nach etwas Automatismus folgen Stück für Stück immer mehr Komfort-Wünsche.
Verständlich.
Das nachträgliche Einbauen erhöht z. B. die Wartbarkeit des bisherigen Codes nicht.

Just my 2 ct.
 

Eric_Lehrer

Mitglied
Hier noch ein Update:

Manchmal wird das Fenster zur Dateiablage hinter dem Outlook Fenster oder sogar noch anderen offenen Fenstern geöffnet, so dass man es erst suchen muss. Wenn man das nicht weiß, denkt man Outlook sei abgestürzt, da es durch das im Hintergrund geöffnete Fenster nicht mehr reagiert.

Dies sollte mit "GetActiveWindow" behoben werden können, ich bekomme es jedoch mit meinen Kenntnissen nicht hin.
 

dr_tommi

alter Oldie
Hier noch ein Update:

Manchmal wird das Fenster zur Dateiablage hinter dem Outlook Fenster oder sogar noch anderen offenen Fenstern geöffnet, so dass man es erst suchen muss. Wenn man das nicht weiß, denkt man Outlook sei abgestürzt, da es durch das im Hintergrund geöffnete Fenster nicht mehr reagiert.

Dies sollte mit "GetActiveWindow" behoben werden können, ich bekomme es jedoch mit meinen Kenntnissen nicht hin.
Sowas ist mir im Zusammenhang mit diesem Tool noch nie passiert.
Es dauert zwar immer eine Weile bei mir bis das Fenster mit dem Dialog aufgeht, aber das ist dann bisher immer im Vordergrund gewesen aber auf keinen Fall hinter Outlook.
Mal schauen ob man das in den Vordergrund zwingen kann.
 

SkAvEnGeR

Master of Tools
Ich habe hier bei meinen Tests das gleiche Phänomen.
Man hat das Gefühl, OL ist abgestürz oder reagiert nicht. Dies liegt dann aber nur daran, dass der Datei-Dialog im Hintergrund liegt und man ihn nunr schwer in den Vordergrund bekommt.
 

RichyZuHause

Alter mit Ego
Den Dialog könnte man nach vorne holen, so dass er "top most" ist.
Das wiederum geht nur mit Windows-API-Aufrufen, nicht mit den Standard-Dialogen von Office.
Die Windows-API-Deklarationen und -aufrufe sind aber nun extra aus dem Code geflogen.
Die waren es auch, die ursprünglich das 32bit-geht-aber-64bit-nicht-Problem verursachten.

Mir fällt da keine gute Lösung ein.
 

Knisterkalle

Mitglied
Hallo zusammen,

ich hätte eine Frage zu dem unglaublichen Skript was mir wirklich die Arbeit erleichtert. Ist es irgendwie möglich bei dem automatischen Dateinamen nicht den kompletten Absender, sondern das was hinter dem @ und vor dem .de steht einzufügen?

Lieben Gruß
 

RichyZuHause

Alter mit Ego
@Knisterkalle : Dazu müsstest Du ein wenig in den Quellcode eingreifen.
Ich beziehe mich hier auf die Version von DrTommi aus Post#94.
Nach der Zeile #253 :
Code:
strSender = myMailItem.SenderName
müsste man diese Zeile dazufügen:
Code:
strSender  = Mid$(strSender , InStrRev(strSender , "@") + 1, InStrRev(strSender , ".") - InStrRev(strSender , "@") - 1)
Ich hab's nicht selbst ausprobiert.
Also ist Dein Feedback gefragt.
 

Knisterkalle

Mitglied
@Knisterkalle : Dazu müsstest Du ein wenig in den Quellcode eingreifen. Ich beziehe mich hier auf die Version von DrTommi aus Post#94. Nach der Zeile #253 :
Code:
strSender = myMailItem.SenderName
müsste man diese Zeile dazufügen:
Code:
strSender = Mid$(strSender , InStrRev(strSender , "@") + 1, InStrRev(strSender , ".") - InStrRev(strSender , "@") - 1)
Ich hab's nicht selbst ausprobiert. Also ist Dein Feedback gefragt.

Das funktioniert schonmal echt super ….vielen Dank dafür👍

Ich hätte noch eine Idee. Wäre es möglich das wenn zb eine bestimmte email Adresse als Absender vorkommt. In diesem Fall meine eigene, dass dann anstatt der Absender der Empfänger, also wieder das was hinter dem @ steht für die Bennenung genommen wird?
Gruß
 

dr_tommi

alter Oldie
Ich hätte noch eine Idee. Wäre es möglich das wenn zb eine bestimmte email Adresse als Absender vorkommt. In diesem Fall meine eigene, dass dann anstatt der Absender der Empfänger, also wieder das was hinter dem @ steht für die Bennenung genommen wird?
Gruß
Grundsätzlich ist vieles möglich. Aber warum sollte man sich selbst Mails schicken und warum wollte dann dabei zwischen Absender und Empfänger unterschieden werden?
 

Knisterkalle

Mitglied
Okay ich versuche das noch einmal etwas genauer zu beschreiben.

Wir haben viel Projektarbeit und auch mehrere Bearbeiter pro Projekt. Damit alle auf die Mails zugreifen können müssen diese manuell auf ein Netzlaufwerk abgelegt werden. Dort wird unterschieden nach EINGANG-EMail und AUSGANG-EMail.

Das Skript funktioniert für EINGANG super …dafür nochmal vielen Dank.

Aber bei Ausgangsemail ist die Information des Absenders für mich ja uninteressant da die EMail ja immer von meinem EMail-Konto kommt. Deshalb wäre es in dem Fall doch besser wenn im Dateinamen nicht der Absender, sondern der Empfänger angezeigt werden würde.

Ich hoffe das war verständlicher?🙈

Gruß
 

Knisterkalle

Mitglied
Hallo und sorry das ich jetzt erst antworte, aber ich war 2 Wochen in Urlaub und hatte kein Internet.

@
Was ist bei mehreren Empfängern?
Es wird dadurch immer komplizierter.
Deshalb bitte ein konkretes Beispiel.

Okay also als Beispiel:

abc@abc.de schreibe eine Mail an def@ghi.de. Wenn ich diese E-Mail ablegen würde also aus meinem E-Mail-Ausgang wäre der normale Dateiname ja mit abc@... diese Information ist für mich jedoch unnütz, da wir separate Ablageordner für E-mail -Eingänge und E-Mail-Ausgänge haben. Deshalb wäre es in dem Fall das ich eine E-mail versende und somit meine E-Mail-Adresse abc@abc.de ist wirklich hilfreich wenn dann der erste Empfänger (wieder alles was hinter dem @ und vor dem Punkt steht, hier ghi ) in den Dateinamen übernommen wird. Ich hoffe ich konnte euch das verständlich erklären👼

Ich wollte heute noch einmal E-Mails ablegen mit der Änderung des Dateinamens das alles was hinter dem @ kommt und vor dem Punkt in den Dateinamen übernommen wird. Ich habe nicht geändert und seltsamerweise bekomme ich jetzt diesen Fehler (siehe Anhang). Keine Ahnung warum ich habe die Zeile wie vorgeschlagen einfach hinter Zeile 253 eingefügt.

Ich habe herausgefunden das das Problem ist wenn hinter dem @ ein Name mit Bindestrich ist wie zb. @jkl-mno.de. Dann tritt der Fehler auf.

Besteht die Adresse hingegen nur aus @jkl.de funktioniert die Änderung super.

Gruß und ich muss sagen Ihr seit einfach super
 

Anhänge

  • Fehlert.png
    Fehlert.png
    3,9 KB · Aufrufe: 7

RichyZuHause

Alter mit Ego
Welchen Wert enthält denn strFinalFileName in Zeile 263
Code:
strFinalFileName = CleanString(strFinalFileName)
,
nachdem sie ausgeführt wurde?
Im Skript werden viele Bereinigungen an dem zu erstellenden Dateinamen vorgenommen, damit ein für Windows gültiger Dateiname gesichert wird.
Kann sein, dass bei Deinem Vorkommen doch ein falscher - oder auch ein bereits vorhandener - erzeugt wird.
Poste mal.
 

RichyZuHause

Alter mit Ego
Wo kann ich denn sehen was passiert nachdem das Skript ausgeführt wurde? Sorry für die blöde Frage.
Blöd? Nö.

Entweder
  1. Einen Breakpoint setzen in Zeile 264.
  2. Laufen lassen.
  3. Dann Mauszeiger über strFinalFileName in Zeile 263 halten. Bubble erscheint mit Wert.
Oder
  1. In Zeile 264 eine Zeile einfügen
    Code:
    Debug.Print "Dateiname ist: '" & strFinalFileName & "'"
  2. Laufen lassen.
  3. Kontrolle im Direkt-Fenster, das erreichst Du per Strg-G.
 

Knisterkalle

Mitglied
Also habe beide Methoden probiert.

Hab den Breakpoint eingefügt und wie auf dem Bild zu sehen oben auf ausführen gedrückt. Dann muss ich den Ordner auswählen und dann kommt der Fehler den ich oben gepostet habe. Jedoch kann ich danach wie im Bild unten zu sehen den Mauszeiger nicht über strFinalFileName halten da nicht der Mauszeiger sondern der Cursor zum schreiben von Texten erscheint.

Bei der 2ten Methode habe ich die Zeile eingefügt, wieder oben auf das grüne Play-Dreieck geklickt, dann kommt der obige Fehler und das Direkt-Fenster ist komplett leer.


Es ist wohl so das wenn der Fehler kommt sowohl Methode 1 und Methode 2 nicht fortgesetzt werden. Das Problem kommt nur wenn die E-Mail Adresse des Absenders einen Bindestrich enthält, was leider jedoch häufig der Fall ist. Bei Adressen, wo keine Bindestriche vorhanden sind tritt der Fehler nicht auf und Methode 1 und Methode 2 funktionieren und da wird dann jeweils der Dateiname angezeigt.
 

Anhänge

  • Fehler 2.png
    Fehler 2.png
    67,2 KB · Aufrufe: 12
Zuletzt bearbeitet:

RichyZuHause

Alter mit Ego
Seltsam.
Der Breakpoint ist richtig gesetzt.
Da der offensichtlich nicht erreicht wird, findet auch die Debug-Ausgabe nicht statt.
Also vermutlich andere Ursache.

Die Fehlermeldung von Deinem Post# 118 selbst wird via Code in Zeile 167 ausgegeben
Code:
MsgBox EXM_002 & Chr(10) & vSuccess & Chr(10) & Chr(10) & EXM_003 & " " & strBackupPath, 48, EXM_017
wahrscheinlich verursacht von Code in Zeile 294
Code:
myMailItem.SaveAs strFullPath, vExtConst
Der löst eine Fehlerbedingung aus, die - weitergereicht - die obige Fehlermeldung ausgeben lässt.
Spannende Frage:
Welchen Wert hat strFullPath, wenn Zeile 294 erreicht wird?

Es ist ziemlich schwierig, ohne Debugger hier was zu erreichen.
Ich habe Deine Datenkonstellation nicht, so dass ich hier nur Programmlogik nachvollziehen kann.
 
Oben Unten