Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Outlook Termine auslesen und übertragen

Outlook Termine auslesen und übertragen
27.02.2020 14:52:23
Martin
Ich möchte aus freigegeben Outlook Kalendern Termine extrahieren und auflisten.
Aus Internetrescherchen habe ich folgende Code zusammengebastelt:

Sub FindTermine()
Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
Dim olNS As Outlook.NameSpace: Set olNS = olApp.GetNamespace("MAPI")
Dim olApt As Object
Dim NextRow As Long
Dim FromDate As Date
Dim ToDate As Date
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Import")
Dim myAppointments As Outlook.Items
Dim objOwner As Object: Set objOwner = olNS.CreateRecipient(AvailableCals.Value)
FromDate = CDate(MonBox.Value)
ToDate = CDate(EndDate.Caption)
On Error Resume Next
If Err.Number > 0 Then Set olApp = CreateObject("Outlook.Application")
objOwner.Resolve
If objOwner.Resolved Then
Set myAppointments = olNS.GetSharedDefaultFolder(objOwner, olFolderCalendar).Items
End If
myAppointments.Sort "[Start]"
myAppointments.IncludeRecurrences = True
Set olApt = myAppointments.Find("[Start] >= """ & _
FromDate & """ and [Start]  "Nothing"
MsgBox objOwner & " - " & olApt.Subject & " - " & CDate(olApt.Start) & " - " & CDate(olApt.End) _
_
& " - " & Format(olApt.End - olApt.Start, "0.00") & " - " & olApt.Location
Set olApt = myAppointments.FindNext
Wend
End Sub
(Die "objOwner" und die "FromDate" und "ToDate" werden über ein Formular gespeist)
Dies funktioniert auch super. Allerdings, möchte ich die Daten in eine tabelle auflisten und nicht in ein MsgBox.
Hierzu habe ich die untere Teil wie folgt ersetzt:


While TypeName(olApt)  "Nothing"
NextRow = 2
With Sheets("Import")
.Range("A2:F199").Value = ""
.Range("A1:F1").Value = Array("Besitzer", "Termin", "Beginn", "Ende", "Dauer", "Ort")
For Each olApt In myAppointments.Items
If (olApt.Start >= FromDate And olApt.Start .Cells(NextRow, "A").Value = objOwner
.Cells(NextRow, "B").Value = olApt.Subject
.Cells(NextRow, "C").Value = CDate(olApt.Start)
.Cells(NextRow, "D").Value = CDate(olApt.End)
.Cells(NextRow, "D").NumberFormat = "HH:MM"
.Cells(NextRow, "E").Value = olApt.End - olApt.Start
.Cells(NextRow, "E").NumberFormat = "HH:MM"
.Cells(NextRow, "F").Value = olApt.Location
NextRow = NextRow + 1
Else
End If
Next olApt
On Error GoTo 0
.Columns.AutoFit
End With
Set olApt = Nothing
Set myAppointments = Nothing
Set olNS = Nothing
Set olApp = Nothing
Wend
cleanExit:
Application.ScreenUpdating = True
Exit Sub
ErrHand:
'Add error handler
Resume cleanExit
End Sub


Dies jedoch liefert nur den ersten Termin und sonst keine.
Was mache ich falsch? Kann mir jemand in die richtige Richtung schicken

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Outlook Termine auslesen und übertragen
27.02.2020 15:01:54
SF
Hola,
verlinkst du bitte deine Fragen in den verschiedenen Foren gegenseitig?
Danke.
Gruß,
steve1da
AW: Outlook Termine auslesen und übertragen
27.02.2020 15:06:17
Martin
Sorry Steve,
ich bin neu dabei, was bedeutet das?
Gruß
Martin
AW: Outlook Termine auslesen und übertragen
27.02.2020 15:08:30
SF
Du setzt hier einen Link zur Frage im anderen Forum, und umgekehrt.
Gruß,
steve1da
Anzeige
AW: Outlook Termine auslesen und übertragen
27.02.2020 15:41:16
volti
Hallo Martin,
ohne das jetzt in irgendeiner Weiese geprüft zu haben, würde ich das eher in dieser Form machen....
Sub TestMe()
 'code.....
 '###################################################
 With Sheets("Import")
  .Range("A2:F199").ClearContents
  .Range("A1:F1").value = Array("Besitzer", "Termin", "Beginn", "Ende", "Dauer", "Ort")
  NextRow = 2
  While TypeName(olApt) <> "Nothing"
     If (olApt.Start >= FromDate And olApt.Start <= ToDate) Then
       .Cells(NextRow, "A").value = objOwner
       .Cells(NextRow, "B").value = olApt.Subject
       .Cells(NextRow, "C").value = CDate(olApt.Start)
       .Cells(NextRow, "D").value = CDate(olApt.End)
       .Cells(NextRow, "D").NumberFormat = "HH:MM"
       .Cells(NextRow, "E").value = olApt.End - olApt.Start
       .Cells(NextRow, "E").NumberFormat = "HH:MM"
       .Cells(NextRow, "F").value = olApt.Location
        NextRow = NextRow + 1
     End If
     Set olApt = myAppointments.FindNext
  Wend
 End With
 'code.....
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Outlook Termine auslesen und übertragen
27.02.2020 18:05:04
Martin
Hallo Karl-Heinz,
vielen, vielen Dank. Ich habe schon einige Zeit damit verbracht es hinzubekommen und habe verzweifelt "aufgegeben".
Ich war mir sicher, dass ich nah dran war und am Ende war es wirklich nur wenig, aber ohne deine Hilfe hätte ich es nicht hinbekommen.
Und das alles nach wenigen Minuten. Einfach toll
Bsten Grüße
Martin
Anzeige
AW: Outlook Termine auslesen und übertragen
27.02.2020 19:29:59
SF
Auch toll dass du verlinkt hast und noch toller dass du im anderen Forum Bescheid gesagt hast......toll
;
Anzeige
Anzeige

Infobox / Tutorial

Outlook Termine auslesen und übertragen


Schritt-für-Schritt-Anleitung

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

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub FindTermine()
        Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
        Dim olNS As Outlook.NameSpace: Set olNS = olApp.GetNamespace("MAPI")
        Dim olApt As Object
        Dim NextRow As Long
        Dim FromDate As Date
        Dim ToDate As Date
        Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Import")
        Dim myAppointments As Outlook.Items
        Dim objOwner As Object: Set objOwner = olNS.CreateRecipient(AvailableCals.Value)
    
        FromDate = CDate(MonBox.Value)
        ToDate = CDate(EndDate.Caption)
    
        On Error Resume Next
        objOwner.Resolve
    
        If objOwner.Resolved Then
            Set myAppointments = olNS.GetSharedDefaultFolder(objOwner, olFolderCalendar).Items
        End If
    
        myAppointments.Sort "[Start]"
        myAppointments.IncludeRecurrences = True
        Set olApt = myAppointments.Find("[Start] >= """ & FromDate & """ and [Start] < """ & ToDate & """")
    
        NextRow = 2
        With ws
            .Range("A2:F199").Value = ""
            .Range("A1:F1").Value = Array("Besitzer", "Termin", "Beginn", "Ende", "Dauer", "Ort")
    
            While Not olApt Is Nothing
                .Cells(NextRow, "A").Value = objOwner
                .Cells(NextRow, "B").Value = olApt.Subject
                .Cells(NextRow, "C").Value = CDate(olApt.Start)
                .Cells(NextRow, "D").Value = CDate(olApt.End)
                .Cells(NextRow, "E").Value = olApt.End - olApt.Start
                .Cells(NextRow, "F").Value = olApt.Location
                NextRow = NextRow + 1
                Set olApt = myAppointments.FindNext
            Wend
            .Columns.AutoFit
        End With
    
        Set olApt = Nothing
        Set myAppointments = Nothing
        Set olNS = Nothing
        Set olApp = Nothing
    End Sub
  4. Führe das Makro aus, um die Termine aus dem Outlook-Kalender auszulesen und in die Excel-Tabelle zu übertragen.


Häufige Fehler und Lösungen

  • Problem: Das Makro gibt nur den ersten Termin aus.

    • Lösung: Stelle sicher, dass die Schleife While Not olApt Is Nothing korrekt implementiert ist. Der Code sollte Set olApt = myAppointments.FindNext verwenden, um alle Termine zu durchlaufen.
  • Problem: Fehlermeldung beim Zugriff auf Outlook-Objekte.

    • Lösung: Überprüfe, ob Outlook korrekt installiert und konfiguriert ist. Stelle sicher, dass die Berechtigungen zum Auslesen der freigegebenen Kalender vorhanden sind.

Alternative Methoden

Wenn Du keine VBA-Programmierung nutzen möchtest, kannst Du auch die Outlook-Funktion „Kalender exportieren“ verwenden, um die Termine in eine CSV-Datei zu exportieren und diese dann in Excel zu importieren.

  1. Öffne Outlook und gehe zu deinem Kalender.
  2. Klicke auf Datei > Öffnen & Exportieren > Importieren/Exportieren.
  3. Wähle In Datei exportieren und dann Comma Separated Values.
  4. Wähle den gewünschten Kalender aus und speichere die CSV-Datei ab.
  5. Öffne die CSV-Datei in Excel.

Praktische Beispiele

Hier ist ein Beispiel für die Ausgabe in Excel:

Besitzer Termin Beginn Ende Dauer Ort
Max Mustermann Team Meeting 01.01.2023 10:00 01.01.2023 11:00 01:00 Besprechungsraum A
Anna Müller Projekt Kickoff 02.01.2023 09:00 02.01.2023 10:00 01:00 Konferenzraum B

Du kannst die Tabelle anpassen, indem Du die Werte in den Excel-Zellen änderst oder das VBA-Skript für spezifische Anforderungen anpasst.


Tipps für Profis

  • Verwende IncludeRecurrences: Um wiederkehrende Termine in Deine Daten einzubeziehen, stelle sicher, dass myAppointments.IncludeRecurrences = True korrekt gesetzt ist.
  • Optimierung: Achte darauf, dass Du nur die benötigten Felder abfragst, um die Performance zu erhöhen, insbesondere bei großen Kalendern.
  • Fehlerhandling: Implementiere ein robustes Fehlerhandling, um Probleme bei der Ausführung des Skripts zu identifizieren und zu beheben.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Kalender gleichzeitig auslesen?
Du kannst mehrere CreateRecipient-Objekte erstellen und die Schleife anpassen, um die Termine aus verschiedenen Kalendern auszulesen.

2. Was ist olapt?
olapt ist eine Abkürzung für Outlook Appointment und bezieht sich auf die Objekte, die Termine in einem Outlook-Kalender darstellen.

3. Warum funktioniert das Skript nicht in meiner Excel-Version?
Stelle sicher, dass Du eine kompatible Excel-Version verwendest und dass alle erforderlichen Outlook-Bibliotheken referenziert sind. VBA sollte in der Regel in Office 2010 und höheren Versionen funktionieren.

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