PDA

Vollständige Version anzeigen : Mails per VBA in Ordner verschieben


MGFLY
07.08.2017, 10:26
Hey zusammen,

nach Längerem mal wieder eine Frage von mir :).

Ich bin gerade dabei mir ein kleines Script zu basteln, mit welchem ich bestimmte Mails, nach Auswahl in einer UserForm, in den jeweiligen Ordner versieben kann.

Mein Problem ist, dass ich mit zwei Postfächern arbeite und das Postfach, in dessen Unterordner die Mails geschoben werden sollen, nicht mein Standard-Postfach ist - sonst hätte ich schon einen Code, der funktioniert.

Public Sub MailsVerschieben()

Dim oulAnwendung As Outlook.Application
Dim oulNamensraum As Outlook.NameSpace
Dim oulOrdnerZiel As Outlook.MAPIFolder
Dim oulAusgewählte As Outlook.Selection
Dim intZähler As Integer

Set oulAnwendung = CreateObject("Outlook.Application")
Set oulNamensraum = oulAnwendung.GetNamespace("MAPI")
Set oulOrdnerZiel = oulNamensraum.GetDefaultFolder(olFolderInbox)
Set oulOrdnerZiel = oulOrdnerZiel.Folders("Test")

Set oulAusgewählte = oulAnwendung.ActiveExplorer.Selection

For intZähler = 1 To oulAusgewählte.Count
oulAusgewählte.Item(intZähler).Move oulOrdnerZiel
Next intZähler

End Sub

Mir erschließt sich nun leider nicht ganz, wie ich das andere Postfach und die jeweiligen Ordner mit Unterordner ansprechen muss, wenn es sich nicht um das Standard-Postfach handelt.

Vielen Dank im Voraus für Eure Hilfe :).

LG

MGFLY

EarlFred
07.08.2017, 12:49
Hallo MGFLY,


Set oulAnwendung = CreateObject("Outlook.Application")
wenn der Code in Outlook steht und dort auch läuft, brauchst Du keine Outlook-Instanz zu erstellen.

Zuerst kommt immer das Postfach (bei Exchange i. d. R. Deine Mailadresse, sonst der Bezeichner der pst-Datei), dann er oberste Mailordner, dann der / die Unterordner:

Dim mapFld As MAPIFolder

Set mapFld = Application.Session.Folders("Name des Postfachs").Folders("Name des Ordners").Folders("Name des Unterordners1")......

'z.B.
' Set mapFld = Application.Session.Folders("Dein.Name@Mailserver.de").Folders("Posteingang").Folders("Name des Unterordners1")......
'ist bedeutungsgleich mit:
' Set mapFld = Application.GetNamespace("MAPI").Folders...

Grüße
EarlFred

markusxy
07.08.2017, 12:52
Über Application.Session.Folders kommst du auf die erste Ebene der Ordner.
Von da weg, schaust du wo dein gewünschter Ordner liegt.

LG Markus

MGFLY
08.08.2017, 08:55
Hey EarlFred,

vielen Dank für die Hilfe.

Prinzipiell total verständlich - nur gibt es bei mir ein Problem.

Das Postfach ist direkt mit meiner "privaten" E-Mail-Adresse verknüpft - soll heißen, dass ich unter Konten nicht mal die andere Mail-Adresse sehe.

Ich finde dazu auch keine .pst.

Kennst du das Problem oder gibt es dazu ein Workaround?

LG

MGFLY

EarlFred
08.08.2017, 11:49
Hallo MGFLY,

Kennst du das Problem oder gibt es dazu ein Workaround?
klar kenne ich das Problem, dass Fragende nicht ordentlich beschreiben können, wie es auf ihrem Rechner aussieht und der Helfer damit im Dunklen tappt. Der Workaround lautet: Finger weg von dieser Frage - ist ja schließlich nicht mein Problem. Die Lösung lautet: Nochmal nachfragen. Tu ich hiermit.

Grüße
EarlFred

MGFLY
08.08.2017, 11:54
Hey,

danke für den freundlichen Hinweis.

Ich verstehe, dass es etwas doof ist, dass mir das nicht aufgefallen ist.

Mir war aber nicht bekannt, dass so etwas überhaupt möglich ist - sonst hätte ich das natürlich bedacht.

Verstehe ich dich richtig, dass es dafür keine Lösung gibt?

LG

EarlFred
08.08.2017, 20:44
Verstehe ich dich richtig, dass es dafür keine Lösung gibt?
Nein.

MGFLY
16.08.2017, 09:46
Dann versteht ich leider nicht, was du meinst.

Welche Infos fehlen dir denn?

EarlFred
16.08.2017, 10:00
Welche Infos fehlen dir denn?
wie Dein Outlook eingerichtet ist, insbesondere die Postfächer. Auf was Du nun konkret zugreifen willst...

Dieser Satz hingegen ist komplett wirr:
Das Postfach ist direkt mit meiner "privaten" E-Mail-Adresse verknüpft - soll heißen, dass ich unter Konten nicht mal die andere Mail-Adresse sehe.
Ich weiß nicht einmal, was ich hier sinnvoll nachfragen soll. Einmal ist es "DAS" (=1) Postfach, dann "die andere..." (=mehrere Konten). Was nun? Und wie "verknüpft" man eine E-Mail-Adresse? Verknüpfen mit was überhaupt?

Letzter Versuch: Klappe in der Mail-Ansicht alle Ebenen der Baumstruktur zu. Als letztes steht dann ganz oben ein Name / Ordner / was_weiß_denn_ich_was_du_da_treibst, ggf. auch mehrere, wenn Du mehrere Konten eingerichtet hast. DAS ist dann der Name / Ordner, der in der ersten Ebene angesprochen werden muss.

MGFLY
18.08.2017, 08:24
Hey,

dann versuche ich es mal darzustellen.

Wir haben ein Standard-Postfach (vorname.nachname@firma.com) - so wird es auch im Baum angezeigt.

Da ich zudem mit einem Sammelpostfach bearbeite, ist dieses mit meinem "verknüpft" - leider kann ich dir nicht sagen wie das gemacht wurde. Wenn ich die Kontoeinstellungen aufrufe, bekomme ich jedenfalls nur mein Standardpostfach angezeigt.

Dieses heißt in dem Baum einfach nur Postfach-2 - ich habe versucht dies so anzusprechen:

Application.Session.("Postfach-2").Folders("Posteingang").Folders("Unterordner1").Folders("Unterordner2")

Da wir Admins haben und die selbst nicht so recht wissen, wie was genau verknüpft ist, kann ich dir leider keine genaueren Infos geben.

Ich hoffe die Infos helfen dir weiter :).

LG

EarlFred
18.08.2017, 08:58
Hallo LG,

noch am gleichen Tag Deiner Frage bekommst Du eine leicht anpassbare Lösung und als Ergebnis tagelanger Denkarbeit bei Dir kommt sowas raus:
Application.Session.[siehst Du nicht, dass hier was fehlt?]("Postfach-2").
Meinst Du, wir kommen so noch in diesem Jahr zum Ziel?

Ich habe versucht dies so anzusprechen:
Ja und? Mit welchem Ergebnis? Hast Du mal versucht, nur die erste, dann die erste und zweite usw. Ebene anzusprechen, anstelle gleich den ganzen Pfad?

Ansonsten lass folgenden Code laufen, wähle den gewünschten Ordner und spreche die Ordner dann wie im Pfad an.
Sub test()
Dim f As Folder
Set f = Application.Session.PickFolder

Debug.Print f.FolderPath
MsgBox f.FolderPath

Set f = Nothing
End Sub

Grüße
EarlFred

MGFLY
18.08.2017, 12:40
Hey EarlFred,

habe die Lösung nun gefunden (nein, es war nicht das, was du im ersten Absatz angesprochen hast - das habe ich nur vergessen hier rein zu schreiben - im Code steht es).

Das Problem war einfach, dass ich, warum auch immer ich es übersehen habe, die Variable doppelt gesetted habe.

Danke dir für deine Hilfe.

Dennoch möchte ich anmerken, dass man nicht so "pissig" reagieren muss, wenn man anfangs Angaben vergisst - vor allem, wenn man nicht mal davon ausgeht, dass sie benötigt werden.

Wie gesagt, dennoch vielen lieben Dank ;).

LG

MGFLY

EarlFred
18.08.2017, 13:10
beim nächsten mal einfach ein bisschen mehr mitdenken, die Sache nicht über Wochen hinschleppen und konzentriert arbeiten.
Dann klappt's auch, dass ein Helfer nicht genervt ist (das ist nämlich so gut wie nie die Schuld des Helfers, wenn er die Geduld verliert...)

Schönes Wochenende.