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

Forumthread: Outlook kalender auf Exch Serv auslesen

Outlook kalender auf Exch Serv auslesen
24.11.2021 17:26:11
Hannes
Hallo liebe Mitglieder,
ich habe eine Frage zum Thema VBA und hoffe, dass ich hier mein Problematik mit Eurer Hilfe verwirklicht bekomme. Leider bin ich in vba nicht sonderlich fit und in einer Verlinkung zu dem Thema einem anderen Thread von Oberschlumpf komm ich nicht weiter :(… vollkommen überfordert quasi mit dem langen Code.
Ich habe einen Outlook Kalender mit diversen Tageseinträgen, den ich sehr gerne in meiner ExcelTabelle in einer Art Userform angezeigt haben möchte.
Dazu habe ich gehofft, dass man den Teamkalender vom Konto (team@musterverein.de) vielleicht irgendwie "auslesen" kann und die einzelnen Einträge der kommenden zwei Tage vielleicht in eine Art Variable schreiben kann. Dabei wäre es wichtig, dass ich den Kalender angeben kann, da ich mehrere Kalender auf einem Exchange-Server zur Auswahl habe. Wichtig wäre auch, dass es eine Variable am Ende in der Ausgabe ist und nicht jeder Termin eigenständig angezeigt wird.
Die Variable sollte dann in etwa so aussehen:
23.01.2022 - 19:00-20:00 - Meeting mit Frau Müller (Absatz)
23.01.2022 - 1600-17:00 - Meeting mit Frau Mustermann (Absatz)
24.01.2022 - 10:00-15:00 - Meeting mit Herrn Meier (Absatz)
Könnte mir da vielleicht jemand bei der Problematik behilflich sein?
GLG und Dank vorab Hannes
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook kalender auf Exch Serv auslesen
24.11.2021 21:42:12
Yal
Hallo Hannes,
versuch zuerst mit Power Query.
Im Menü "Daten", "neue Abfrage", "Aus anderen Quellen", "Aus Microsoft Exchange".
Du müsstest die Adresse deines Postfachs herausfinden und eingeben.
Gehe nicht auf laden sondern "Bearbeiten". So kannst Du in Power Query die notwendige Filter setzen.
Wenn es passend ist, "Schliessen und laden". Dann hast Du deine Terminliste in Excel.
Aktualisierung mit Rechtsklick "Aktualisieren". Man kann auch eine automatische Aktualisierung einstellen.
VG
Yal
Anzeige
AW: VBA
24.11.2021 22:04:21
Fennek
Hallo,
mit der richtigen Referenzierung sollte VBA geeignet sein. Hier ein allgemeines Beispiel:

Sub Appointments_auslesen()
Dim FLD As Folder, mApp As AppointmentItem
Set FLD = ActiveExplorer.CurrentFolder
Debug.Print FLD.DefaultItemType, FLD.Items.Count, FLD.Parent.Name
'FLD.DefaultItemType
' 0: MailItem
' 1: AppointmentItem
' 2: ContactItem
For i = 1 To FLD.Items.Count
If FLD.Items(i).Class = olAppointment Then ' 26
Set mApp = FLD.Items(i)
With mApp
Debug.Print .Start, .End; .Duration, .Subject, .Body, .Location
End With
End If
Next i
Set mApp = Nothing
Set FLD = Nothing
End Sub
mfg
Anzeige
AW: VBA
24.11.2021 23:29:34
Hannes
Leider kommt da ein Fehler in Deinem Sub. Gleich bei Folder erste Zeile .
yal: das habe ich hinbekommen, wäre aber aber ehr an einer VBA Prozesur interessiert, da ich das als Variable brauche und keinen Platz habe für die Einträge
AW: VBA: geht schon, aber ...
25.11.2021 08:45:25
Fennek
Hallo,
der Code war getestet, hat aber einige Voraussetzungen:
- Outlook - VBA
- der Kalender muss ausgewählt sein, "ActiveExplorer"
- in der For ... Next-Schleife sollte ein Abbruch ergänzt werden
if i &gt 9 then exit for
Wie man den Kalender auswählt aus beliebigen anderen Ansichten, muss ich noch lernen.
mfg
Anzeige
AW: VBA
25.11.2021 21:05:38
Hannes
Das ist alles leider viel viel viel zu umfangreich. Und um das zu überblicken bedarf es vielmehr Grundkenntnisse - dachte das ist mit ein paar Zeilen Code ansprechbar, schade. Danke trotzdem.
Ich brauche eine VBA Excel Lösung, die mich hier leider nicht sehe für meine Bedürfnisse.
Danke euch trotzdem , scheint wohl nicht so einfach zu bewerkstelligen zu sein…
Anzeige
AW: VBA
26.11.2021 00:13:26
Yal
Hallo Hannes,
ich bin entäuscht, dass Du dich so schnell entmutigen lässt. Du brauchst nur einen "Zwischen"-Filter auf das Datum der Veranstaltung und dann im Code durch einen Funktion zu ersetzen (es handelt sich hier nicht um eine Terminliste):

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"ID", Int64.Type}, {"Datum", type date}, {"Wer", type any}, {"Wo", type any}, {"Was", type any}, {"Kommnentar", type text}}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Geänderter Typ", each [Datum] >= Date.From(DateTime.LocalNow()) and [Datum] 
Ich halte Power Query für alle Aufgaben, wo es nur darum geht, Daten umzugestalten, für viel leichter als VBA. Prozess-Steuerung, ja VBA. Datenbehandlung, Power Query.
Bei VBA geht sehr schnell irgendwas schief. Es ist extrem schwierig, ein Code auf die Beine zu stellen, der eine lange Zeit ohne Anpassung läuft.
VG
Yal
Anzeige
AW: kommt da noch was?
25.11.2021 20:59:18
Hannes
Keine Ahnung von was du sprichst : ist nicht mein Thread ..
gleicher Name usw... (owT)
26.11.2021 10:27:22
Pierre
Anzeige
AW: Outlook kalender auf Exch Serv auslesen
26.11.2021 20:02:19
Andreas
Ich habe da mal in nem anderen Projekt etwas ähnliches gehabt..... vielleicht kannst Du damit was anfangen:
Kommt als Msgbox raus, eigentlich so wie du es willst.
Aber wie man dort den Exchange Server auswählt... Vielleicht weiss da noch jemand was dazu.... ich lass die Frage mal offen....
Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration
' If desperate declare as Variant

Public Function getOutlookAppointments() As String
Dim oOutlook              As Object
Dim oNS                   As Object
Dim oAppointments         As Object
Dim oFilterAppointments   As Object
Dim oAppointmentItem      As Object
Dim bOutlookOpened        As Boolean
Dim sfilter               As String
Dim displayText As String
Dim startDate As Date
Const olFolderCalendar = 9
Dim counter As Long
On Error Resume Next
Set oOutlook = GetObject(, "Outlook.Application")    'Bind to existing instance of Outlook
If Err.Number  0 Then    'Could not get instance of Outlook, so create a new one
Err.Clear
Set oOutlook = CreateObject("Outlook.Application")
bOutlookOpened = False    'Outlook was not already running, we had to start it
Else
bOutlookOpened = True    'Outlook was already running
End If
' Consider this mandatory as soon as possible after On Error Resume Next
On Error GoTo 0
DoEvents
Set oNS = oOutlook.GetNamespace("MAPI")
'Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar)
' Error sorting the folder rather than items
'  was previously bypassed due to missing On Error GoTo 0
'oAppointments.Sort "[Start]"
Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar).Items    '  """ & Format(startDate + 1, "ddddd h:nn AMPM") & """")
sfilter = ("[Start] > """ & Format(startDate, "ddddd h:nn AMPM") & """ and [Start] 

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Outlook Kalender auf Exchange Server auslesen


Schritt-für-Schritt-Anleitung

Um deinen Outlook Kalender auf einem Exchange Server auszulesen und in Excel darzustellen, kannst du entweder VBA oder Power Query verwenden. Hier sind die Schritte für beide Methoden.

VBA-Methode:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu (Einfügen > Modul).

  3. Kopiere den folgenden VBA-Code in das Modul:

    Public Function getOutlookAppointments() As String
        Dim oOutlook As Object
        Dim oNS As Object
        Dim oAppointments As Object
        Dim oAppointmentItem As Object
        Dim displayText As String
        Dim startDate As Date
        Const olFolderCalendar = 9
    
        On Error Resume Next
        Set oOutlook = GetObject(, "Outlook.Application")
        If Err.Number <> 0 Then
            Set oOutlook = CreateObject("Outlook.Application")
        End If
        On Error GoTo 0
    
        Set oNS = oOutlook.GetNamespace("MAPI")
        Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar).Items
    
        ' Hier kannst du das Startdatum anpassen
        startDate = Now
    
        ' Filter für die nächsten zwei Tage
        oAppointments.Sort "[Start]"
        For Each oAppointmentItem In oAppointments
            If oAppointmentItem.Start >= startDate And oAppointmentItem.Start < startDate + 2 Then
                displayText = displayText & Format(oAppointmentItem.Start, "dd.mm.yyyy") & " - " & _
                Format(oAppointmentItem.Start, "hh:mm") & " - " & oAppointmentItem.Subject & vbCrLf
            End If
        Next oAppointmentItem
    
        getOutlookAppointments = displayText
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Verwende die Funktion in einer Zelle, um die Termine anzuzeigen.

Power Query-Methode:

  1. Gehe zu Daten > Neue Abfrage > Aus anderen Quellen > Aus Microsoft Exchange.
  2. Gib die Adresse deines Exchange-Postfachs ein.
  3. Wähle die Kalenderdaten aus und gehe auf Bearbeiten.
  4. Filtere die Daten nach Datum, um nur die relevanten Einträge anzuzeigen.
  5. Schließe und lade die Daten in Excel.

Häufige Fehler und Lösungen

  • Fehler: "Outlook nicht geöffnet"
    Stelle sicher, dass Outlook geöffnet ist, bevor du den VBA-Code ausführst. Wenn Outlook nicht läuft, wird der Code nicht funktionieren.

  • Problem mit dem Kalender
    Wenn du mehrere Kalender hast und einen spezifischen auswählen möchtest, musst du den Code anpassen, um die GetFolder-Methode zu verwenden und die outlook kalender id ermitteln.

  • Power Query lädt keine Daten
    Überprüfe deine Verbindungseinstellungen und stelle sicher, dass du die erforderlichen Berechtigungen hast, um auf den Exchange-Server zuzugreifen.


Alternative Methoden

Wenn VBA und Power Query nicht deinen Bedürfnissen entsprechen, kannst du auch PowerShell verwenden:

# PowerShell Beispiel für das Auslesen von Outlook-Terminen
$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNamespace("MAPI")
$Calendar = $Namespace.GetDefaultFolder(9)  # 9 steht für olFolderCalendar
$Appointments = $Calendar.Items

foreach ($Appointment in $Appointments) {
    if ($Appointment.Start -gt (Get-Date) -and $Appointment.Start -lt (Get-Date).AddDays(2)) {
        Write-Output "$($Appointment.Start) - $($Appointment.Subject)"
    }
}

Praktische Beispiele

Ein Beispiel für die Ausgabe der Termine in einer Excel-Zelle wäre:

23.01.2022 - 19:00 - Meeting mit Frau Müller
23.01.2022 - 16:00 - Meeting mit Frau Mustermann
24.01.2022 - 10:00 - Meeting mit Herrn Meier

Diese Ergebnisse kannst du direkt in deine Excel-Tabelle integrieren, um eine Übersicht der outlook termine auszuwerten.


Tipps für Profis

  • Nutze benutzerdefinierte Funktionen in VBA, um die Datenverarbeitung zu optimieren.
  • Du kannst den Teamkalender in Excel anzeigen, indem du die spezifische Ordnersuche in deinem VBA-Code anpasst.
  • Halte deinen VBA-Code modular, indem du Funktionen erstellst, die wiederverwendbar sind.

FAQ: Häufige Fragen

1. Wie kann ich die Outlook Kalender ID ermitteln?
Du kannst die Kalender-ID über den VBA-Code auslesen, indem du die GetFolder-Methode für den spezifischen Kalender verwendest.

2. Funktioniert dieses Verfahren auch mit älteren Excel-Versionen?
Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, jedoch kann die Power Query-Methode in älteren Versionen eingeschränkt sein.

3. Kann ich mehrere Kalender gleichzeitig auslesen?
Ja, du kannst mehrere Kalender anzeigen, indem du die entsprechenden Ordner im VBA-Code anpasst oder durch Power Query mehrere Abfragen erstellst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige