Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Outlook-Ordner und Mails listen

Forumthread: Outlook-Ordner und Mails listen

Outlook-Ordner und Mails listen
23.11.2005 12:07:01
Dieter
Hallo,
ich versuche aus Excel heraus Ordner-Strukturen und zugehörige Mails in Outlook auszulesen und in Excel einzutragen. Dies funktioniert bis zur 1. Ordnerebene mit folgendem Code:

Sub OutlookOrdnerListen()
Dim objOutlook As Object
Dim objOrdner As Object
Dim objSpace As Object
Dim i As Integer
Dim ii As Integer
Dim iii As Integer
Dim j As Integer
Dim intZähler As Integer
Dim dblGröße As Double
Dim mf As MAPIFolder
Set objOutlook = CreateObject("Outlook.Application")
Set objSpace = objOutlook.GetNamespace("MAPI")
intZähler = 1
For i = 1 To objSpace.Folders.Count
intZähler = intZähler + 1
Set objOrdner = objSpace.Folders(i)
dblGröße = 0
For ii = 1 To objOrdner.Folders.Count
Sheets(1).Cells(intZähler, 2) = objOrdner.Folders(ii)
For iii = 1 To objOrdner.Folders(ii).Items.Count
Sheets(1).Cells(intZähler, 3) = objOrdner.Folders(ii).Items(iii)
intZähler = intZähler + 1
Next
intZähler = intZähler + 1
Next
intZähler = intZähler + 1
Next
End Sub

Hier sind keine Unterordner enthalten. Wie kann ich hier Unterordner mit einbeziehen ?
Gruß
Dieter Steffen
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook-Ordner und Mails listen
23.11.2005 12:57:55
Rolf
Hallo Dieter,
vielleicht hilft dir das
fG
Rolf
'Prozedur aus einem leeren Tabellenblatt starten

Sub Start_All_Mails_Anzeigen()
alle_mails_anzeigen   'Start des Makros!!!
End Sub

Public

Sub alle_mails_anzeigen(Optional ActFolder As Object)
'by Fritz M. hf / Oktober 2004
Dim mail    As Object
Dim fold    As Object
Static k    As Long
Static v As Long
On Error Resume Next 'weiter, trotz fehlendem Betreff, Sender o.Sendedatum
If ActFolder Is Nothing Then
Set outlk = CreateObject("Outlook.Application")
Set struc = outlk.GetNamespace("MAPI").Folders
Set persö = struc.item("Persönliche Ordner")
k = 1
v = 0
Else
Set persö = ActFolder                   'aktuellen Ordner zuweisen
v = v + 1                               'Odner zählen
If v >= 11 Then                          'Standardordner auslassen
For Each mail In persö.Items            'alle Elemente des Ordners darstellen
k = k + 1                           'Zeilenzähler
Cells(k, 1) = persö.Parent.Name
Cells(k, 2) = persö.Name
Cells(k, 3) = mail.Subject
Cells(k, 4) = mail.SenderName
Cells(k, 5) = mail.SentOn
Next mail
End If
End If
For Each fold In persö.Folders
alle_mails_anzeigen fold    'rekursiver Aufruf, damit alle Unterordner
'abgearbeitet werden
Next fold
End Sub

Anzeige
AW: Outlook-Ordner und Mails listen
24.11.2005 06:46:12
Dieter
Hallo Rolf,
vielen Dank. Dein Programm habe ich leicht modifizier: funktioniert soweit.
Vielleicht kannst Du mir auch noch sagen, wie ich die aktuellen Ordnergrößen
ermitteln kann, die in Outlook in den Eigenschaften angezeigt werden.
Hinweis: die Größe des einzelnen Mails kann ich mit bezogen auf Dein o.g.
Programm mit mail.size ermitteln. Das hilft mir jedoch nicht abschließend,
da die Ordnergröße von der Summe der Größe der einzelnen Mails abweichen kann.
MfG
Dieter
Anzeige
Ordnergrößen
24.11.2005 11:09:44
Rolf
Hallo Dieter,
die Frage kann ich dir leider nicht beantworten.
fG
Rolf
AW: Ordnergrößen
24.11.2005 11:46:00
bst
Auch Hallo,
so wie ich das verstehe geht das im Outlook Objekt Modell nicht, wie anscheinend sehr vieles :-(
Man braucht hierzu entweder CDO (wenn Du Glück hast ist das bei Dir installiert) oder Redemption http://www.dimastr.com/redemption/ welches in der neuen Version 4 komplett CDO ersetzen können soll. 'Der Link' zu CDO ist wohl dieser: http://www.cdolive.com/
Anbei mal ein bescheidener Versuch meinerseits, vielleicht geht's ja bei Dir.
HTH, Bernd
--
Option Explicit

' von hier kopiert: http://www.pcreview.co.uk/forums/thread-1836951.php

'You can use the folder property PR_MESSAGE_SIZE in CDO 1.21 code to
'get the approximate size of the folder. Some hidden messages for
'rules, archive settings and so on might not be tabulated in that
'property, I'm not sure about that. CDO property tags are listed at
'http://www.cdolive.com/cdo10.htm and there's CDO sample code at
'http://www.cdolive.com/cdo5.htm.
'
'CDO 1.21 is an optional installation for Outlook 2000 and later, so
'you might have to install CDO from the Office CD as an Outlook
'optional feature if you don't already have it installed.

Const CdoPR_MESSAGE_SIZE = &HE080003

Public Function GetFolderSize(f As MAPIFolder) As Double ' oder LONG ?
   'Requires a project reference to CDO 1.21 (CDO.DLL)
   Dim objOutlook As Outlook.Application
   Dim objCDO As MAPI.Session
   Dim objFolder As MAPI.Folder
   Dim objFields As MAPI.Fields
   Dim strID As String
   
   'On Error Resume Next
   
   ' Instantiate an Outlook Application object.
   Set objOutlook = CreateObject("Outlook.Application")
   
   'Use the given Folder and get its EntryID
   strID = f.EntryID
   
   'Then set up a CDO Session using a piggy-back login
   Set objCDO = CreateObject("MAPI.Session")
   objCDO.Logon "", "", False, False
   
   'Now get the item as a CDO Message
   Set objFolder = objCDO.GetFolder(strID)
   
   'Now get the size from the folder
   Set objFields = objFolder.Fields
   GetFolderSize = objFields.Item(CdoPR_MESSAGE_SIZE).Value
   
   objCDO.Logoff
   
   Set objFields = Nothing
   Set objFolder = Nothing
   Set objCDO = Nothing
   Set objOutlook = Nothing
End Function

Sub TestIt()
   Debug.Print GetFolderSize(ActiveExplorer.CurrentFolder)
End Sub

Anzeige
AW: Ordnergrößen
24.11.2005 12:22:08
Rolf
Hi bernd,
danke für deine, wie immer, profunden Tipps.
Was mich angeht, werde ich allerdings die Finger davon lassen,
und im Zweifel dieselben betätigen.
Herzliche Grüße
Rolf
AW: Ordnergrößen
24.11.2005 12:46:45
bst
Hi Rolf,
Danke für die Blumen. Leider hatte ich das nur im Outlook VBA getestet, nicht in Excel.
Dort läuft's so noch nicht. ActiveExplorer.CurrentFolder gibt's halt nur in OL.
cu, Bernd
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Outlook-Ordner und Mails in Excel listen


Schritt-für-Schritt-Anleitung

Um die Ordnerstruktur und die zugehörigen Mails aus Outlook in Excel zu listen, kannst Du den folgenden VBA-Code verwenden. Dieser Code liest die erste Ordnerebene und die Unterordner aus.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub OutlookOrdnerListen()
    Dim objOutlook As Object
    Dim objOrdner As Object
    Dim objSpace As Object
    Dim i As Integer
    Dim ii As Integer
    Dim iii As Integer
    Dim intZähler As Integer
    Set objOutlook = CreateObject("Outlook.Application")
    Set objSpace = objOutlook.GetNamespace("MAPI")
    intZähler = 1
    For i = 1 To objSpace.Folders.Count
        Set objOrdner = objSpace.Folders(i)
        Sheets(1).Cells(intZähler, 1) = objOrdner.Name
        For ii = 1 To objOrdner.Folders.Count
            Sheets(1).Cells(intZähler, 2) = objOrdner.Folders(ii).Name
            For iii = 1 To objOrdner.Folders(ii).Items.Count
                Sheets(1).Cells(intZähler, 3) = objOrdner.Folders(ii).Items(iii).Subject
                intZähler = intZähler + 1
            Next iii
            intZähler = intZähler + 1
        Next ii
        intZähler = intZähler + 1
    Next i
End Sub
  1. Führe das Makro aus, um die Ordner und Mails in Excel aufzulisten.

Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“

    • Lösung: Stelle sicher, dass Outlook geöffnet ist und Du die richtige Berechtigung hast, um auf die Ordner zuzugreifen.
  • Fehler: Keine Daten werden angezeigt

    • Lösung: Überprüfe, ob in den Ordnern tatsächlich Mails vorhanden sind. Der Code könnte auch anpassen werden, um spezifische Ordner zu durchsuchen.

Alternative Methoden

Eine alternative Methode, um die Ordnerstruktur von Outlook zu exportieren, ist die Verwendung von CDO (Collaboration Data Objects). Damit kannst Du auch zusätzliche Informationen wie die Ordnergröße abrufen. Dies erfordert jedoch zusätzliche Installationen.

Hier ist ein Beispiel, um die Größe eines Ordners abzurufen:

Public Function GetFolderSize(f As MAPIFolder) As Double
    Dim objCDO As MAPI.Session
    Dim objFolder As MAPI.Folder
    Set objCDO = CreateObject("MAPI.Session")
    Set objFolder = objCDO.GetFolder(f.EntryID)
    GetFolderSize = objFolder.Fields(CdoPR_MESSAGE_SIZE).Value
End Function

Praktische Beispiele

Wenn Du die Ordner versenden möchtest, kannst Du den folgenden VBA-Code verwenden, um die Ordnerstruktur in eine Textdatei zu exportieren:

Sub ExportOrdner()
    Dim fso As Object
    Dim ts As Object
    Dim objOutlook As Object
    Dim objSpace As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.CreateTextFile("C:\Ordnerliste.txt", True)
    Set objOutlook = CreateObject("Outlook.Application")
    Set objSpace = objOutlook.GetNamespace("MAPI")
    Dim i As Integer
    For i = 1 To objSpace.Folders.Count
        ts.WriteLine objSpace.Folders(i).Name
    Next i
    ts.Close
End Sub

Tipps für Profis

  • Um die outlook-ordnerstruktur effizient zu durchsuchen, solltest Du die Verwendung von rekursiven Funktionen in Betracht ziehen, um alle Unterordner zu erfassen.
  • Dokumentiere Deine Makros gut, damit Du schnell Änderungen vornehmen oder sie an andere weitergeben kannst.
  • Teste Deine Makros in einer sicheren Umgebung, bevor Du sie in einer produktiven Umgebung einsetzt.

FAQ: Häufige Fragen

1. Wie kann ich die aktuelle Ordnergröße in Outlook ermitteln?
Du kannst die Größe eines Ordners mit der CDO-Bibliothek ermitteln. Verwende dafür den entsprechenden VBA-Code, wie im Abschnitt „Alternative Methoden“ beschrieben.

2. Kann ich die Ordnerstruktur auch in eine Excel-Tabelle exportieren?
Ja, mit dem bereitgestellten VBA-Code kannst Du die Ordnerstruktur von Outlook in eine Excel-Tabelle exportieren. Achte darauf, dass Du die richtige Excel-Version verwendest, die Makros unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige