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

Ältestes Datum via Excel in Outlook auslesen

Forumthread: Ältestes Datum via Excel in Outlook auslesen

Ältestes Datum via Excel in Outlook auslesen
17.07.2025 12:41:40
Marc
Hallo zusammen,

ich nutze derzeit einen Code zum auslesen der Anzahl von Mails aus verschiedenen Outlook Ordnern. Diesen habe ich vor Jahren hier von einer netten Person erhalten.

Dieser sieht wie folgt aus:

Sub test()


Dim lngIndex As Long, lngCur As Long, lngCount As Long, lngRow As Long
Dim olApp As Outlook.Application, olVerz As Outlook.MAPIFolder
Dim olSubL1User As Outlook.MAPIFolder 'user-Ebene
Dim olSubL2Post As Outlook.MAPIFolder 'user-Ebene

Dim olSubL3Gru1 As Outlook.MAPIFolder
Dim olSubL3Gru2 As Outlook.MAPIFolder
Dim olSubL3Gru3 As Outlook.MAPIFolder
Dim olSubL4MA01 As Outlook.MAPIFolder
Dim olSubL4MA02 As Outlook.MAPIFolder
Dim olSubL4MA03 As Outlook.MAPIFolder
Dim olSubL4MA04 As Outlook.MAPIFolder
Dim olSubL4MA05 As Outlook.MAPIFolder
Dim olSubL4MA06 As Outlook.MAPIFolder
Dim olSubL4MA07 As Outlook.MAPIFolder
Dim olSubL4MA08 As Outlook.MAPIFolder
Dim olSubL4MA09 As Outlook.MAPIFolder
Dim olSubL4MA10 As Outlook.MAPIFolder
Dim olSubL4MA11 As Outlook.MAPIFolder
Dim olSubL4MA12 As Outlook.MAPIFolder
Dim olSubL4MA13 As Outlook.MAPIFolder

Tabelle2.Select

Dim OutlookUser As String, xMA As Long, xMaMAX As Long
OutlookUser = "test@test.com"

On Error Resume Next
Set olApp = CreateObject("Outlook.Application")
'===========================================================================================
' Level-1 behandeln (User)
'===========================================================================================
For Each olVerz In olApp.GetNamespace("Mapi").Folders
If olVerz.Name = OutlookUser Then
Set olSubL1User = olVerz 'user gefunden
Exit For
End If
Next olVerz
If olSubL1User Is Nothing Then
MsgBox "Fehler-01_test_b: Der User " & OutlookUser & " wurde nicht gefunden - Abbruch."
Exit Sub
End If

'===========================================================================================
' Level-2 behandeln (Posteingang)
'===========================================================================================
If Not olSubL1User Is Nothing Then
For Each olVerz In olSubL1User.Folders
If olVerz.Name = "Posteingang" Then
Set olSubL2Post = olVerz
Exit For
End If
Next olVerz
If olSubL2Post Is Nothing Then
MsgBox "Fehler-02_testB: Posteingang wurde nicht gefunden - Abbruch."
Exit Sub
End If
End If
'===========================================================================================
' Level-3 behandeln (Gruppen)
'===========================================================================================
If Not olSubL2Post Is Nothing Then
For Each olVerz In olSubL2Post.Folders
If olVerz.Name = "test5B" Then Set olSubL3Gru1 = olVerz
If olVerz.Name = "test6B" Then Set olSubL3Gru2 = olVerz
If olVerz.Name = "Top" Then Set olSubL3Gru3 = olVerz
If olVerz.Name = "parken" Then Set olSubL3Gru3 = olVerz
Next olVerz

If olSubL3Gru1 Is Nothing Or olSubL3Gru2 Is Nothing Or olSubL3Gru3 Is Nothing Then
MsgBox "Fehler-03_test5B: Eine Gruppe wurde nicht gefunden - Abbruch."
Exit Sub
End If
End If

'===========================================================================================
' Level-4 behandeln (Mitarbeiter prüfen), Gruppen sind bereits auf Existenz geprüft.
'===========================================================================================
xMA = 0
xMaMAX = 3

For Each olVerz In olSubL3Gru1.Folders
If olVerz.Name = Range("B5") Then xMA = xMA + 1
If olVerz.Name = Range("B6") Then xMA = xMA + 1
If olVerz.Name = Range("B7") Then xMA = xMA + 1
If olVerz.Name = Range("B8") Then xMA = xMA + 1
If olVerz.Name = Range("B9") Then xMA = xMA + 1
If olVerz.Name = Range("B10") Then xMA = xMA + 1
If olVerz.Name = Range("B11") Then xMA = xMA + 1
If olVerz.Name = Range("B12") Then xMA = xMA + 1
If olVerz.Name = Range("B13") Then xMA = xMA + 1
If olVerz.Name = Range("B14") Then xMA = xMA + 1
If olVerz.Name = Range("B15") Then xMA = xMA + 1
If olVerz.Name = Range("B16") Then xMA = xMA + 1
If olVerz.Name = Range("B19") Then xMA = xMA + 1
If olVerz.Name = Range("B18") Then xMA = xMA + 1

Next olVerz
If xMA xMaMAX Then
MsgBox "Fehler-04_test5B: Mindestens einer von " & xMaMAX & " Mitarbeitern wurde nicht gefunden - Abbruch."
Exit Sub
End If
'===========================================================================================
' Level-4 behandeln (Mitarbeiter ok => auslesen), Gruppen sind bereits auf Existenz geprüft.
' MsgBox "kein Postfach bzw. Postfach-Ordner gefunden!", vbCritical Or vbSystemModal
'===========================================================================================


For Each olVerz In olSubL2Post.Folders
If olVerz.Name = "test5b" Then
Set olSubL2Post = olVerz
Range("C4").Value = olSubL2Post.Items.Count 'Anzahl Emails des MAnn
End If

If olVerz.Name = "Top" Then
Set olSubL2Post = olVerz
Range("C19").Value = olSubL2Post.Items.Count 'Anzahl Emails des MAnn
End If

If olVerz.Name = "parken" Then
Set olSubL2Post = olVerz
Range("C18").Value = olSubL2Post.Items.Count 'Anzahl Emails des MAnn
End If

Next olVerz

For Each olVerz In olSubL3Gru1.Folders
If olVerz.Name = Range("B5") Then
Set olSubL4MA01 = olVerz
Range("C5").Value = olSubL4MA01.Items.Count 'Anzahl Emails des MAnn
End If
....
next olVerz

end sub


Ich benötige nun noch das älteste Datum aus dem jeweilig angesprochenen Ordner. Dies würde ja nur hier sinn machen, wo die einzelnen Ordner abgefragt werden:

For Each olVerz In olSubL3Gru1.Folders

If olVerz.Name = Range("B5") Then
Set olSubL4MA01 = olVerz
Range("C5").Value = olSubL4MA01.Items.Count 'Anzahl Emails des MAnn
End If
....
next olVerz


Ich probiere es jetzt schon seit ein paar Tagen. Ich bekomme aber immer nur das älteste Datum aus meinem persönlichen Postfach und nicht wie gewünscht aus dem angesprochenen.

Hat jemand eine Idee oder einen Lösungsansatz?

Danke und viele Grüße,
Marc
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 14:27:59
ralf_b
Hi Marc,

ich sehe in deinem Code nicht wo du sowas wie ein Datum zurückbekommst. Wenn du schon ne Frage zu einem bestimmten Problem hast, dann solltest du den beteiligten Code auch mal zeigen.
Grundsäztlich würde ich dort ansetzen wo du schon selbst drauf gekommen bist. olSubL4MA01.Items Die item's sind ja die Mail oder sonstige Objekte.

Du könntest jetzt nahc dem Typ suchen oder erstmal das erste oder letzte Aus der liste holen.
https://learn.microsoft.com/de-de/office/vba/api/outlook.items.getlast
https://learn.microsoft.com/de-de/office/vba/api/outlook.items.getfirst
Kommt halt drauf an wie deine Liste aufgebaut ist. Älteste oder Neueste zu erst.
https://learn.microsoft.com/de-de/office/vba/api/outlook.olobjectclass
Die items haben eine Klasse z.b.Mailitem und die Mailitems haben Eigenschaften z.b. https://learn.microsoft.com/de-de/office/vba/api/outlook.mailitem.creationtime
Anzeige
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 18:52:20
Marc
Warum sortierst du das ganze nicht nach Datum ..
und nimmst einfach nur die letzte Mail ..
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 19:13:13
schauan
... Items(1) ist das älteste Mail ...
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 20:51:22
Marc
Daher die Frage, was will der Ersteller?
Anzeige
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 21:09:18
schauan
... das Datum der ältesten Email in seiner Übersicht ...
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 14:54:37
Marc
Hallo Ralf,

danke für deinen Input.

Ich nutze folgenden Code für das Datum:

Sub TimeOfEMail_Top()


Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem
Dim objSelection As Outlook.Selection
Dim receivedDateTime As Date
Dim ws As Worksheet
Dim lastrow As Long


Set objOL = CreateObject("Outlook.Application")

Set objSelection = objOL.ActiveExplorer.Selection

Set objMsg = objSelection.Item(1)

receivedDateTime = objMsg.ReceivedTime

Debug.Print receivedDateTime

End Sub


Diesen spreche ich im vorhin gezeigten Code an:

For Each olVerz In olSubL3Gru1.Folders

If olVerz.Name = Range("B5") Then
Set olSubL4MA01 = olVerz
Range("C5").Value = olSubL4MA01.Items.Count 'Anzahl Emails des MAnn
call TimeOfEMail_Top
End If
....
next olVerz


Leider verliert er aber dann den Bezug zu dem Ordner, aus dem er gerade ausliest und zeigt mir stattdessen das älteste Datum von dem Ordner an, der gerade in meinem Outlook aktiv ist. Egal welcher es ist.

VIele Grüße
Marc
Anzeige
AW: Ältestes Datum via Excel in Outlook auslesen
17.07.2025 17:59:01
schauan
Hallöchen,

das Sub verliert keinen Bezug sondern stellt einen neuen Bezug her. Du übergibst dem Sub ja keinen "Bezug" Integriere den Code in Deinen Basiscode oder übergib dem Sub das gerade betroffene Postfach als Objekt.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige