Mit diesem VBA-Makro für Outlook können Sie eine vollständige Liste aller Ordner in Ihrem Outlook-Profil inklusive der Nachrichtenzählung erstellen und in einer neuen E-Mail-Nachricht ausgeben. Dies ist besonders hilfreich, wenn Sie eine Übersicht Ihrer Ordnerstruktur benötigen oder wenn Sie regelmäßig Daten aus Outlook-Ordnern erfassen möchten. Anders als bei PowerShell-Skripten, die oft zusätzliche Sicherheitsanpassungen erfordern, lässt sich das Makro direkt in Outlook ausführen und ist damit ideal für Nutzer, die eine einfache, schnelle Lösung zur Dokumentation ihrer Ordner benötigen.
Das Makro erstellt eine E-Mail im Entwurfsmodus mit einer detaillierten Liste aller Ordner und Unterordner in Ihrem Outlook-Profil, einschließlich der Nachrichtenzahl in jedem Ordner. Sie können die E-Mail dann überprüfen und bei Bedarf anpassen oder an sich selbst senden, um eine dauerhafte Dokumentation Ihrer Ordnerstruktur zu erhalten.
Sub PrintOutlookFoldersToEmail()
Dim olApp As Object
Dim olNS As Object
Dim olFolder As Object
Dim subFolder As Object
Dim folderList As String
' Outlook-Objekte initialisieren
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
' Durchläuft alle Ordner im Profil und ruft die Ordnerstruktur ab
For Each olFolder In olNS.Folders
folderList = folderList & "Account: " & olFolder.Name & vbCrLf
Call GetFolderList(olFolder, folderList, " ")
Next olFolder
' Neue E-Mail erstellen und die Ordnerliste einfügen
Dim newMail As Object
Set newMail = olApp.CreateItem(0)
newMail.Subject = "Liste der Outlook-Ordner"
newMail.Body = folderList
newMail.Display ' Zeigt die E-Mail zum Überprüfen an
End Sub
Sub GetFolderList(olFolder As Object, ByRef folderList As String, indent As String)
Dim subFolder As Object
' Füge Ordnername und Nachrichtenzählung hinzu
folderList = folderList & indent & olFolder.Name & " (" & olFolder.Items.Count & " Nachrichten)" & vbCrLf
' Durchläuft alle Unterordner und ruft deren Struktur rekursiv ab
For Each subFolder In olFolder.Folders
Call GetFolderList(subFolder, folderList, indent & " ")
Next subFolder
End Sub
Erklärung des Codes
- Initialisierung der Outlook-Objekte: Der Code erstellt eine Verbindung zu Outlook und dem MAPI-Namespace, um auf die Ordnerstrukturen zuzugreifen.
- Schleife über alle Hauptordner: Jeder Hauptordner im Profil wird durchlaufen und die Funktion
GetFolderList
wird aufgerufen, um die Ordnernamen und Nachrichtenanzahl zu ermitteln. - Rekursive Funktion
GetFolderList
: Diese Funktion geht durch alle Unterordner des jeweiligen Hauptordners und fügt deren Namen und die Anzahl der Nachrichten zufolderList
hinzu. Diese Funktion ist rekursiv, um auch tiefere Ebenen der Ordnerstruktur zu erfassen. - E-Mail-Erstellung: Nachdem alle Ordner und Nachrichtenanzahlen gesammelt wurden, erstellt das Makro eine neue E-Mail-Nachricht und fügt die Liste in den Textkörper ein. Die E-Mail wird zur Ansicht angezeigt, damit Sie die Liste überprüfen können.
Hinweise zur Nutzung
- Stellen Sie sicher, dass die Makro-Sicherheitsstufe in Outlook so eingestellt ist, dass die Ausführung von Makros möglich ist.
- Dieses Makro erstellt die E-Mail im Entwurfsmodus, sodass Sie die Liste überprüfen und bei Bedarf anpassen können, bevor Sie die Nachricht senden.
- Falls Sie die Ausgabe in einer Datei statt in einer E-Mail wünschen, kann der Code entsprechend angepasst werden.
Anpassungen
Falls Sie nur bestimmte Ordner oder nur die Ordner ohne Nachrichtenzählung anzeigen möchten, lässt sich das leicht anpassen.
VBA-Code zur Ausgabe der Ordnerstruktur mit Ordnergröße
Sub PrintOutlookFoldersWithSizeToEmail()
Dim olApp As Object
Dim olNS As Object
Dim olFolder As Object
Dim folderList As String
' Outlook-Objekte initialisieren
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
' Durchläuft alle Ordner im Profil und ruft die Ordnerstruktur ab
For Each olFolder In olNS.Folders
folderList = folderList & "Account: " & olFolder.Name & vbCrLf
Call GetFolderListWithSize(olFolder, folderList, " ")
Next olFolder
' Neue E-Mail erstellen und die Ordnerliste einfügen
Dim newMail As Object
Set newMail = olApp.CreateItem(0)
newMail.Subject = "Liste der Outlook-Ordner mit Größe"
newMail.Body = folderList
newMail.Display ' Zeigt die E-Mail zum Überprüfen an
End Sub
Sub GetFolderListWithSize(olFolder As Object, ByRef folderList As String, indent As String)
Dim subFolder As Object
Dim folderSize As Long
Dim item As Object
' Ordnergröße berechnen
folderSize = 0
For Each item In olFolder.Items
folderSize = folderSize + item.Size
Next item
folderSize = folderSize \ 1024 ' Konvertiert die Größe in Kilobyte (KB)
' Füge Ordnername, Nachrichtenzählung und Ordnergröße hinzu
folderList = folderList & indent & olFolder.Name & " (" & olFolder.Items.Count & " Nachrichten, " & folderSize & " KB)" & vbCrLf
' Durchläuft alle Unterordner und ruft deren Struktur rekursiv ab
For Each subFolder In olFolder.Folders
Call GetFolderListWithSize(subFolder, folderList, indent & " ")
Next subFolder
End Sub
VBA-Code zur Ausgabe der Ordnerstruktur mit Ordnergröße und Ordneranzahl
Um die Gesamtanzahl der Ordner in das Makro einzufügen und gleichzeitig versteckte Systemordner, RSS-Abonnement-Ordner sowie Synchronisierungsprobleme-Ordner auszuschließen, modifizieren wir den Code wie folgt:
- Ermittlung der Ordneranzahl: Eine zusätzliche Variable zählt alle sichtbaren Ordner.
- Filterung von Systemordnern: Wir überprüfen bestimmte Ordner-Eigenschaften, um sicherzustellen, dass versteckte Ordner und nicht benötigte Ordner (wie RSS oder Sync Issues) nicht gezählt werden.
Hier ist der angepasste VBA-Code:
Sub PrintOutlookFoldersWithSizeAndCountToEmail()
Dim olApp As Object
Dim olNS As Object
Dim olFolder As Object
Dim folderList As String
Dim folderCount As Long
' Outlook-Objekte initialisieren
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
' Ordneranzahl und Liste zurücksetzen
folderCount = 0
folderList = "Liste der Outlook-Ordner (ohne versteckte und nicht benötigte Ordner):" & vbCrLf & vbCrLf
' Durchläuft alle Hauptordner im Profil und ruft die Ordnerstruktur ab
For Each olFolder In olNS.Folders
Call GetFolderListWithSizeAndCount(olFolder, folderList, " ", folderCount)
Next olFolder
' Ordneranzahl an den Anfang der Liste hinzufügen
folderList = "Gesamtanzahl sichtbarer Ordner: " & folderCount & vbCrLf & vbCrLf & folderList
' Neue E-Mail erstellen und die Ordnerliste einfügen
Dim newMail As Object
Set newMail = olApp.CreateItem(0)
newMail.Subject = "Liste der Outlook-Ordner mit Größe und Ordneranzahl"
newMail.Body = folderList
newMail.Display ' Zeigt die E-Mail zum Überprüfen an
End Sub
Sub GetFolderListWithSizeAndCount(olFolder As Object, ByRef folderList As String, indent As String, ByRef folderCount As Long)
Dim subFolder As Object
Dim folderSize As Long
Dim item As Object
' Überspringe versteckte oder unerwünschte Ordner (RSS, Sync Issues, etc.)
If olFolder.Name = "RSS Feeds" Or olFolder.Name = "Sync Issues" Or olFolder.Name = "Sync Issues (Local Failures)" _
Or olFolder.Name = "Sync Issues (Server Failures)" Or olFolder.Name = "Junk E-Mail" Then
Exit Sub
End If
' Ordnergröße berechnen
folderSize = 0
For Each item In olFolder.Items
folderSize = folderSize + item.Size
Next item
folderSize = folderSize \ 1024 ' Konvertiert die Größe in Kilobyte (KB)
' Ordner zur Liste hinzufügen und die Ordneranzahl erhöhen
folderList = folderList & indent & olFolder.Name & " (" & olFolder.Items.Count & " Nachrichten, " & folderSize & " KB)" & vbCrLf
folderCount = folderCount + 1
' Durchläuft alle Unterordner und ruft deren Struktur rekursiv ab
For Each subFolder In olFolder.Folders
Call GetFolderListWithSizeAndCount(subFolder, folderList, indent & " ", folderCount)
Next subFolder
End Sub
Erklärung der Änderungen
- Ordneranzahl zählen: Die
folderCount
-Variable erhöht sich nur für sichtbare Ordner. Sie wird am Anfang derfolderList
-Ausgabe eingefügt. - Ausfiltern nicht benötigter Ordner: Systemordner wie “RSS Feeds”, “Sync Issues” und “Junk E-Mail” werden durch eine einfache
If
-Bedingung ausgeschlossen. - Anpassung der Ausgabe: Die Ordneranzahl wird zusammen mit den Ordnernamen und deren Größen in der E-Mail angezeigt.
Hinweise
- Dieser Code erfasst nur sichtbare, nutzerrelevante Ordner und ignoriert versteckte und spezielle Systemordner.
- Falls in Ihrem Outlook-Profil zusätzliche Ordner ausgeschlossen werden sollen, können Sie deren Namen zur
If
-Bedingung hinzufügen.