Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Outlook Funktionspostfach auslesen

Outlook Funktionspostfach auslesen
18.07.2020 23:47:54
Marko
Hallo liebe Community,
ich benötige eure Unterstützung!
Ich möchte mit Excel VBA ein Outlook Funktionspostfach (ungelesene E-Mails auslesen).
Problem: Bisher werden die E-Mails aus dem Ordner "Posteingang", jedoch nicht aus allen Unterordner (12 Stück) ausgelesen. Ich habe erstmal versucht einen weiteren Unterordner auszulesen, allerdings scheitere ich hier. Des Weiteren werden alle E-Mails und nicht nur die ungelesenen aufgelistet.
Der bisherige Code:
Option Explicit

Public Sub ReadMailItems()
Dim olapp        As Object
Dim olName       As Object
Dim olHFolder    As Object
Dim olHFolder2   As Object
Dim olUFolder    As Object
Dim olUFolder2    As Object
Dim strAttCount  As String
Dim olItemsCount As Long
Dim lngAttCount  As Long
Dim letzteZeile  As Long
On Error Resume Next
Set olapp = CreateObject("Outlook.Application")
Set olName = olapp.GetNamespace("MAPI")
Set olHFolder = olName.Session.Folders("POSTFACHNAME")
Set olUFolder = olHFolder.Folders("Posteingang")
Set olUFolder2 = olHFolder2.Folders("NAME DES UNTERORDNERS")
[A1].Value = "E-Mail-Ordner"
[B1].Value = "Datum//Uhrzeit"
[C1].Value = "Empfänger"
Rows(1).Font.Bold = True
For olItemsCount = 1 To olUFolder.Items.Count
With olUFolder.Items.Item(olItemsCount)
For lngAttCount = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).  _
_
Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olHFolder.  _
_
Name & "->" & olUFolder.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = . _
ReceivedTime
Sheets("Tabelle2").Range("C" & olItemsCount + letzteZeile).Value = .To
strAttCount = ""
End With
Next olItemsCount
letzteZeile = Sheets("Tabelle2").Range("A" & Rows.Count).End(xlUp).Row
For olItemsCount = 1 To olUFolder2.Items.Count
With olUFolder2.Items.Item(olItemsCount)
For lngAttCount = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).  _
_
Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olHFolder2.  _
_
Name & "->" & olUFolder2.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .SenderEmailAddress
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = . _
ReceivedTime
Sheets("Tabelle2").Range("C" & olItemsCount + letzteZeile).Value = .To
End With
Next olItemsCount
On Error GoTo 0
End Sub

Könnt Ihr mir bitte weiterhelfen? Für eure Unterstützung bedanke ich mich bereits im Voraus!
Vielen Dank und liebe Grüße
Marko

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook Funktionspostfach auslesen
19.07.2020 08:15:44
Oberschlumpf
Hi Marko,
ich kann dir mit einem Code nicht helfen, da ich in Outlook nur 1 Konto eingerichtet habe.
Aber vielleicht hilft dir mein Tipp, per Upload eine Bsp-Datei zu zeigen, die deinen jetzigen Code enthält.
Denn, wie du ja selbst siehst, wird der Code hier im Forum nicht ganz so übersichtlcht angezeigt.
Und, zumindest weiß ich das besonders bei mir :-), es kann sein, dass auch andere keine so große Lust haben, erst mal eine Bsp-Datei erstellen zu müssen, damit man mit dem Testen beginnen kann.
Ciao
Thorsten
AW: Outlook Funktionspostfach auslesen
19.07.2020 08:52:02
Marko
Hallo Thorsten,
vielen Dank für deine Antwort!
Ich habe eine Beispieldatei hochgeladen: https://www.herber.de/bbs/user/139159.xlsm
Es war gestern/heute schon etwas spät und da ist mir gar nicht aufgefallen, dass der Code visuell nicht so gut dargestellt wird.
Für die Unterstützung bedanke ich mich bereits im Voraus.
Gruß
Marko
Anzeige
AW: Outlook Funktionspostfach auslesen
19.07.2020 14:48:05
mumpel
Hallo!
Das kannst Du indem Du die Ordner rekursiv durchläufst. Hier mal ein Beispielcode aus meinem Projekt.
Outlook-Ordner rekursiv einlesen
Gruß, René
AW: Outlook Funktionspostfach auslesen
19.07.2020 20:00:46
Marko
Hallo Rene,
vielen Dank für den Tipp! Ich habe es jetzt sehr lange probiert und komme leider nicht zum Ergebnis.
Gibt es weitere Unterstützung?
Gruß
Marko
AW: Outlook Funktionspostfach auslesen
19.07.2020 20:16:08
mumpel
Was hast Du probiert, und wie?
AW: Outlook Funktionspostfach auslesen
19.07.2020 20:20:03
Marko
Ich habe probiert die Ordner rekursiv durchlaufen zulassen (vgl. Code von René), allerdings schaffe ich dies nicht. Ich muss auch gestehen, dass ich noch nicht viele Kenntnisse in VBA habe.
Anzeige
AW: Outlook Funktionspostfach auslesen
19.07.2020 21:44:30
mumpel

Zitat:
Ich muss auch gestehen, dass ich noch nicht viele Kenntnisse in VBA habe.
____________________________
Quelle: Herber-Forum


Ungünstige Voraussetzungen. 😉
Zeig uns doch mal den Code den Du versucht hast.
BTW:
Zur besseren Codedarstellung kannst Du auch mein/unser Tool nutzen (dann musst Du nicht jedes Mal eine Datei hochladen)=>VBA-Code zur Darstellung in Browsern aufbereiten
Anzeige
AW: Outlook Funktionspostfach auslesen
19.07.2020 22:12:46
Marko
Richtig, ungünstige Voraussetzungen :-) Ich lerne gerade und habe Spaß dabei. Nachwuchs tut ja immer gut :-)
Ich bin sehr froh, dass man sich in diesem Forum austauschen kann und Hilfe bekommt! So macht lernen auch Spaß!
Der Code ist:
Public Sub ReadMailItems()
Dim olapp As Object
Dim olName As Object
Dim olHFolder As Object
Dim olHFolder2 As Object
Dim olUFolder As Object
Dim olUFolder2 As Object
Dim olOrdner As Outlook.MAPIFolder
Dim strAttCount As String
Dim strAttCount2 As String
Dim olItemsCount As Long
Dim olItemsCount2 As Long
Dim lngAttCount As Long
Dim lngAttCount2 As Long
Dim letzteZeile As Long
Dim AnzahlEmail As Integer, i As Integer, Email As Integer, a As Long
On Error Resume Next
Set olapp = CreateObject("Outlook.Application")
Set olName = olapp.GetNamespace("MAPI")
Set olHFolder = olName.Session.Folders("Postfachname")
Set olUFolder = olHFolder.Folders("Posteingang")
Set olUFolder2 = olHFolder.Folders("Unterordner")
Set olOrdner = GetObject("", "Outlook.Application").Session.Stores("Postfachname"). _
GetDefaultFolder(6).Folders("Posteingang").Folders("Unterordner").Folders
AnzahlEmail = olOrdner.Items.Count
[A1].Value = "E-Mail-Ordner"
[B1].Value = "Datum//Uhrzeit"
[C1].Value = "Empf䮧er"
Rows(1).Font.Bold = True
For olItemsCount = 1 To olUFolder.Items.Count
With olUFolder.Items.Item(olItemsCount)
For lngAttCount = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olUFolder.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .ReceivedTime
Sheets("Tabelle2").Range("C" & olItemsCount + letzteZeile).Value = .To
strAttCount = ""
End With
Next olItemsCount2
letzteZeile = Sheets("Tabelle2").Range("A" & Rows.Count).End(xlUp).Row
For olItemsCount2 = 1 To olUFolder2.Items.Count
With olUFolder2.Items.Item(olItemsCount)
For lngAttCount2 = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olHFolder2.Name & "->" &  _
olUFolder2.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .SenderEmailAddress
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .ReceivedTime
Sheets("Outlook-Auslese").Range("C" & olItemsCount + letzteZeile).Value = .To
End With
Next olItemsCount
On Error GoTo 0
Set olOrdner = Nothing
'Die Zelle 'A2' soll selektiert werden
[A2].Select
'Die Statuszeile wird wieder ausgeschaltet
Application.StatusBar = False
End Sub
Sub RecurseFolders(ByVal fldr As Object)
For Each itm In fldr.Items
Set n = Cells(Rows.Count, "A").End(xlUp).Offset(1)
With itm
n.Resize(1, 3).Value = Array(.Subject, .ReceivedTime, fldr.FolderPath)
End With
Next
'Prozedur ruft sich selbst fr alle Unterordner erneut auf
For Each subfolder In fldr.Folders
RecurseFolders subfolder
Next
End Sub
Das Problem ist, dass dieses Postfach 11 Unterordner hat. Ich habe es erstmal mit einem Unterordner probiert und dieser wird nicht erkannt. Lediglich der Posteingang wird erfasst.
Für die tolle Unterstützung bedanke ich mich bereits im Voraus!!!!
Anzeige
AW: Outlook Funktionspostfach auslesen
19.07.2020 22:16:44
Marko
Jetzt habe ich das Tool genutzt und der Code wird schon wieder so komisch dargestellt :-( Ich hoffe man kann damit etwas anfangen!
AW: Outlook Funktionspostfach auslesen
20.07.2020 11:14:40
mumpel
Dann hast Du das Tool nicht richtig genutzt. Wenn Du das Tool genutzt hast, darfst Du den Code nicht nochmal per Copy&Paste in die Zwischenablage befördern. Also Code markieren, "Auswahl in HTML" anklicken, und dann hier einfügen.
AW: Outlook Funktionspostfach auslesen
20.07.2020 20:55:40
Marko
Dann ist hier gleich der Code. Die direkte Referenzierung hat leider keine Besserung herbeigeführt.
Hier der Code:

Zitat:
Option Explicit


Public Sub ReadMailItems()
Dim olapp As Object
Dim olName As Object
Dim olHFolder As Object
Dim olHFolder2 As Object
Dim olUFolder As Object
Dim olUFolder2 As Object
Dim strAttCount As String
Dim olItemsCount As Long
Dim lngAttCount As Long
Dim letzteZeile As Long
On Error Resume Next
Set olapp = CreateObject("Outlook.Application")
Set olName = olapp.GetNamespace("MAPI")
Set olHFolder = olName.Session.Folders("Postfachname")
Set olUFolder = olHFolder.Folders("Posteingang")
Set olUFolder2 = olHFolder2.Folders("Name zweites Postfach")
[A1].Value = "E-Mail-Ordner"
[B1].Value = "Datum//Uhrzeit"
[C1].Value = "Empf䮧er"
Rows(1).Font.Bold = True
For olItemsCount = 1 To olUFolder.Items.Count
With olUFolder.Items.Item(olItemsCount)
For lngAttCount = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olUFolder.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .ReceivedTime
Sheets("Tabelle2").Range("C" & olItemsCount + letzteZeile).Value = .To
strAttCount = ""
End With
Next olItemsCount
letzteZeile = Sheets("Tabelle2").Range("A" & Rows.Count).End(xlUp).Row
For olItemsCount = 1 To olUFolder2.Items.Count
With olUFolder2.Items.Item(olItemsCount)
For lngAttCount = 1 To .Attachments.Count
If strAttCount = "" Then
strAttCount = .Attachments.Item(lngAttCount).Filename
Else
strAttCount = strAttCount & vbCrLf & .Attachments.Item(lngAttCount).Filename
End If
Next lngAttCount
Sheets("Tabelle2").Range("A" & olItemsCount + letzteZeile).Value = olUFolder2.Name
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .SenderEmailAddress
Sheets("Tabelle2").Range("B" & olItemsCount + letzteZeile).Value = .ReceivedTime
Sheets("Tabelle2").Range("C" & olItemsCount + letzteZeile).Value = .To
End With
Next olItemsCount
On Error GoTo 0
End Sub

____________________________
Quelle: Herber-Forum

Anzeige
AW: Outlook Funktionspostfach auslesen
20.07.2020 11:11:24
mumpel
Nur als Tipp:
Die "[A1]"-Methode solltest Du nicht nutzen. Nimm stattdessen die direkte Referenzierung Range("A1").Value

14 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige