Email Ablage Funktion in angelegte Ordnerstruktur
#1
Hallo liebe Community,

ich möchte mir in Outlook ein eigenes Makro entwickeln, welches mir die Ablage von Emails erleichtert.

Ziel:
Ich will die markierte Email in einen Ablageordner (in Outlook, nicht in einen Ordner im Explorer) ablegen.

Das mache ich bisher manuell, indem ich die Email per Drag&Drop in den Ordner auf der linken Seite schiebe.

Gewünschte Funktionsweise:
- ich markiere eine Email
- Auslösen meines Makros (wie ich das auslöse weiß ich noch nicht, würde es gerne per Menüband auslösen)
- es soll eine UserForm erscheinen die mir alle angelegten Ordner anzeigt
- ich wähle einen Ordner aus und drücke "OK"
- markierte Email wird darin abgelegt

Meine Erste Frage:
- wie kann ich alle meine Ordner in ein eigens gebauten UserForm mit einer Listbox anzeigen lassen?
(Bitte beachten, dass ich nicht die von Outlook bereitgestellte Ordnerauswahl verwenden will)

Ich habe schon etliche Makros in Excel geschrieben und dies ist mein erster Versuch in Outlook.
In Excel habe ich über AddItem eine Listbox mit Werten aus konkreten Zellen befüllt. In Outlook weiß ich nicht wie und wo ich die Ordnerstruktur via AddItem oder etwas anderem in die Listbox laden kann.

Über Ideen eurerseits würde ich mich sehr freuen und verbleibe mit besten Grüßen zum Wochenende

Martin
Antworten Top
#2
Hallo,

Outlook ermöglicht den Start von Makro's per Menü:

[Daten]:[Optionen]:[Menüband anpssen]

Ein neues 'benutzerdefiniertes Menü' ermöglicht das Einfügen eines Links zu einem Makro der auch umbenannt und mit einem geeigneten Icon belegt werden kann.

Das wird wohl abgespeichert in "%appdata%\local\Outlook"

Die Userform ist genau wie in Excel.

mfg
Antworten Top
#3
Hallo Fennek,
danke für deinen Hinweis. Den habe ich soweit eingebaut und kann auch testweise Makros und UserForms darüber aufrufen. Jetzt muss ich den Code innerhalb der UserForm erstellen.

Ich bin etwas weiter gekommen und habe folgenden Code zusammengeschustert:

Code:
Option Explicit

Public Sub FindFolder()

Dim folders As Outlook.folders

Set folders = Application.Session.folders
LoopFolders folders

End Sub

Private Sub LoopFolders(folders As Outlook.folders)
Dim F As Outlook.MAPIFolder

For Each F In folders

LoopFolders F.folders
Debug.Print F.Name

Next

End Sub

Der Code bringt mir per F.Name die Ordnernamen und darüber kann ich auch Ordner aktivieren = das ist sehr gut.
Kann mir jemand bitte sagen was "LoopFolders F.folders" genau macht? Das sieht für mich aus wie eine Loop in der Loop?

Vielen Dank.
Grüße
Martin
Antworten Top
#4
Hallo Martin,

"Loopfolder" ruft sich selbst auf:

Dieser rekursive Aufruf ermöglich alle Unterordner zu durchsuchen.

mfg
Antworten Top
#5
Hallo liebe Leute,

ich bin etwas weiter und will euch nicht mit dem ganzen Code belästigen, denn ich denke es reicht ein Teil aus.
Und zwar habe ich verschiedene Ordnernamen ausgelesen und nun z.B. ein Ordnernamen als String in einer Variablen.

Jetzt möchte ich diesen Ordnernamen, z.B. "Tablet" öffnen. Er befindet sich in einem Unterordner.
Habt ihr Ideen, wie ich das schaffe?

Code:
' ListBox Bauwerke (lbBauwerke) Change-Ereignis: Wenn ein Bauwerk angewählt wird, soll was passieren
Private Sub lbBauwerke_Change()
Dim Bauwerk As String

If IsNull(lbBauwerke.Value) Then Exit Sub
Bauwerk = lbBauwerke.Value

' 03.09.2021: An dieser Stelle fehlt das Makro zum öffnen von dem Ordner namens "Bauwerk"
Unload Me

End Sub

Vielen Dank für jede Hilfe

Gruß
Martin
Antworten Top
#6
Hallo Leute,

bin eigentlich an dem Punkt, dass meine ursprüngliche Idee nun funktioniert. Also, ich kann über das Ribbon mein Makro aufrufen, über eine Userform kann ich aus mehrere Hundert Ordner über die Wahl der ersten beiden Anfangsbuchstaben mir Ordnern in Listboxes anzeigen lassen (den Code habe ich nicht geteilt).

Die Listboxen werden mit Ordernamen gefüllt. Jetzt wähle ich einen Ordnernamen aus und er öffnet mir auch den Ordner - toll, das funktioniert!

Code:
' ListBox Bauwerke (lbBauwerke) Change-Ereignis: Wenn ein Bauwerk angewählt wird, soll was passieren
Private Sub lbBauwerke_Change()
Dim Bauwerk As String
Dim Name As String
Dim FoundFolder As Folder

If IsNull(lbBauwerke.Value) Then Exit Sub
Bauwerk = lbBauwerke.Value

Set FoundFolder = FindInFolders(Application.Session.Folders, Bauwerk)
Set Application.ActiveExplorer.CurrentFolder = FoundFolder

Unload Me
End Sub
Und die Function:
Code:
Function FindInFolders(TheFolders As Outlook.Folders, Name As String)
  Dim SubFolder As Outlook.MAPIFolder
   
  On Error Resume Next
   
  Set FindInFolders = Nothing
   
  For Each SubFolder In TheFolders
    If LCase(SubFolder.Name) Like LCase(Name) Then
      Set FindInFolders = SubFolder
      Exit For
    Else
      Set FindInFolders = FindInFolders(SubFolder.Folders, Name)
      If Not FindInFolders Is Nothing Then Exit For
    End If
  Next
End Function

Ich finde mein eigenes Makro, bzw. das was ich zusammengebastelt habe, zu umständlich.
In einem ersten Schritt loope ich durch alle Ordner, um die Ordnernamen in Listboxen zu schreiben. Danach loope ich wieder durch alle Ordner um abzugleichen: Listbox.value = Outlookordnernamen um dann den Ordner zu öffnen.

Hat jemand eine Idee, wie ich:
- mit einem Loop alle Ordnerpfade auslesen und temporär, für die Zeit solange wie Outlook geöffnet ist, irgendwo hineingeschrieben werden können?
- oder wie ich bei Outlookstart ein automatisches Loop laufen lasse um die Ordnerpfade für den Arbeitstag einmal gespeichert zu haben, um sie dann wenn ich sie brauche direkt abrufen zu können? Ich Excel könnte ich ja einfach ein Tabellenblatt füllen. Kann ich sowas vielleicht in ein sehr sehr großes Array schreiben?

Danke euch!

Grüße
Martin
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste