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

Forumthread: Outlook-Termine eines bestimmten Tages aufrufen

Outlook-Termine eines bestimmten Tages aufrufen
30.09.2004 17:48:12
Olli
Hallo liebe Forumsgemeinde,
habe da mal eine Frage und hoffe, dass Ihr mir weiterhelfen könnt.
Ich möchte über ein Textfeld in einer UF ein Datum eingeben und per OK-Button dann die Outlook-Termine von diesem einen Tag in Excel einlesen. Geht das?
Hat wer Tips für mich, wie ich das bewerkstelligen kann? Wäre riesig nett.
Gruß
Olli
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Outlook-Termine eines bestimmten Tages aufrufen
sergiesam
Hi
hier ein Beispiel:
https://www.herber.de/bbs/user/11516.xls

Sub OutlookTerminEinlesen()
Dim outl, Datum As Date
Dim ns, terminOrdner, termine, termin
Set outl = CreateObject("Outlook.Application")
Set ns = outl.GetNamespace("MAPI")
Set terminOrdner = ns.GetDefaultFolder(9) 'olFolderCalendar
'Filtere Termine dieses Tages
Datum = Range("B1")
Set termine = terminOrdner.Items.Restrict("[Start] >= '" & Datum & "' and [end] <= & '" & Datum + 1 & "'")
Range("A6").Activate
If Range("A6") <> "" Then Range(Range("A6"), Range("A6").End(xlDown)).EntireRow.Delete
For Each termin In termine
ActiveCell = termin.Subject
ActiveCell.Offset(0, 1) = termin.Start
ActiveCell.Offset(0, 2) = termin.End
ActiveCell.Offset(1, 0).Activate
Next termin
End Sub

Gruß,
sam
Anzeige
AW: Outlook-Termine eines bestimmten Tages aufrufe
Ramses
Hallo Sam
Sorry,... ich musste es einfach zeigen ;-)
Woher wusstest du das mit dem "Restrict" ?
Gruss Rainer
AW: Outlook-Termine eines bestimmten Tages aufrufe
sergiesam
hi,
ich habe schon einiges mit Outlook programmiert (eigenen Abgleich mit access/Outlook) und ich habe ein Buch über die Programmierung von Outlook.
Ich hoffe Olli meldet sich auch noch und weiß unsere Mühen zu schätzen, ein Forum lebt ja auch von Rückmeldungen, gell?
bist ja auch ein alter Excel-Hacker hier im forum. Hast schon sehr viele Beiträge geliefert! Toll!
lg,
Sam
Anzeige
AW: Outlook-Termine eines bestimmten Tages aufrufe
30.09.2004 21:09:26
Olli
Hallo Sam und Rainer,
vielen Dank erstmal für Eure Mühe und vor allem für diese rasche Hilfe ;o) Bin echt baff...das Forum ist echt spitze...werde die Codes gleich testen und mich dann nochmal melden...
Gruß
Olli
es funzt...vielen vielen Dank...Ihr seid SPITZE !!
30.09.2004 21:16:53
Olli
Olli
warum übernimmt er nicht mehrtätige Termine?
01.10.2004 13:34:55
Olli
Hallo...
nun habe ich doch noch eine Frage...warum findet er meine mehrtägigen Termine nicht mittels des Codes?
Gruß
Olli
Anzeige
Korrektur
sergiesam
Hi,
kleiner Irrtum: einfach ändern
Set termine = terminOrdner.Items.Restrict("[Start] >= '" & Datum & "' and [start] nicht end sondern 2x Start!
Achtung: Unter extras - optionen - Kalender wird eine Startzeit angegeben (standard 8:00 Uhr) Termine werden vor dieser Startzeit nicht gefunden. Warum? leider Keine Ahnung!
Sam
Anzeige
2. Korrektur
sergiesam
Hi,
damit der Fehler mit der Extras-Kalendereinstellungen nicht greift, musst du die Uhrzeit beim Datum als Format mitgeben.
Mit folgender Zeile findet er jetzt wirklich alles korrekt:
Set termine = terminOrdner.Items.Restrict("[Start] >= '" & Format(Datum, "mm""/""dd""/""yyyy hh:nn") & "' and [Start] also insgesamt:

Sub OutlookTerminEinlesen()
Dim outl, Datum As Long
Dim ns, terminOrdner, termine, termin As AppointmentItem
Set outl = CreateObject("Outlook.Application")
Set ns = outl.GetNamespace("MAPI")
Set terminOrdner = ns.GetDefaultFolder(9) 'olFolderCalendar
'Filtere Termine dieses Tages
Datum = Range("B1")
Set termine = terminOrdner.Items.Restrict("[Start] >= '" & Format(Datum, "mm""/""dd""/""yyyy hh:nn") & "' and [Start] <= '" & Format(Datum + 1, "mm""/""dd""/""yyyy hh:nn") & "'")
Range("A6").Activate
If Range("A6") <> "" Then Range(Range("A6"), Range("A6").End(xlDown)).EntireRow.Delete
For Each termin In termine
ActiveCell = termin.Subject
ActiveCell.Offset(0, 1) = termin.Start
ActiveCell.Offset(0, 2) = termin.End
ActiveCell.Offset(1, 0).Activate
Next termin
End Sub

Gruß,
Sam
Anzeige
AW: 2. Korrektur
Ramses
Hallo Sam,
haut bei mir nicht hin :-(
Wenn ich deine "Set Temine..." Anweisung verwende, kriege ich alle Termine in meinem Kalender ! ?
Ein Grundsätzliches Problem sehe ich in der Verwaltung der Serientermine in Outlook.
Tägliche Serientermine (z.B. täglich eine Woche lang) werden intern, wenn die Serie am Montag startet, für den Rest der Woche nicht mehr als Termin verwaltet !!!, sondern von Outlook einfach eingezeichnet (siehe GetRecurrencePattern). Erst wenn der Termin aus der Serie manuell gelöst wird (Bearbeiten - Dieses Serienelement) verwaltet Outlook diesen Termin an diesem Tag.
Gemäss der OL VBA - Hilfe, wäre es also gar nicht möglich !?, ein Serienelement eines Tages abzufragen, wenn die Serie vorher gestartet wurde. z.B. du frägst den Dienstag ab, die Serie startet aber schon am Montag. Der Startzeitpunkt und der Endzeitpunkt liegen nämlich nicht im abgefragten Bereich.
Irgendwie blicke ich da nicht mehr durch.
Gruss Rainer
Anzeige
Noch ein wichtiger Hinweis...
Ramses
Hallo Sam
Das "LateBinding" ist unter Office 2003 definitiv nicht zu verwenden, weil unsicher:
"..In Office Outlook 2003 befinden sich die Elemente im Items-Auflistungsobjekt nicht unbedingt in einer bestimmten Reihenfolge...."
Auszug aus der OLH von Outlook 2003. Hier sollte/muss umbeding "Early Binding" mit verweisen auf die Outlook Object Bibliothek verwendet werden, sonst kommt das ganze einer Wundertüte gleich, welchen Ordner du jetzt tatsächlich ansprichst :-)
Gruss Rainer
Anzeige
Nun aber auch noch ... :-)
Ramses
Hallo
nun habe ewig rumgepfrimmelt bis ich das blöde restrict endlich auf der Reihe hatte,... nun will ich's auch noch zeigen :-)

Sub Read_Control_Termin_to_Excel()
'by Ramses
Dim myR As Integer, i As Integer
Dim startDate As Date, endDate As Date, recDate As Date
Dim myOlApp As Object, myOlSpace As Object, myOlFolder As Object
Dim myOlDateRange As Object, sAppoint As Object
'Datum vorschlagen
Select Case Weekday(Now + 1, vbMonday)
Case Is > 5
recDate = Now + 3
Case Else
recDate = Now + 1
End Select
'Datum abfragen
startDate = Format(DateValue(InputBox("Welches Datum soll abgefragt werden ?" & Chr$(13) & _
"Datum muss im Format ""01.01.2004"" eingeben werden", "Terminsuche", Format(recDate, "dd.mm.yyyy"))))
'Alternativ
'startDate = ActiveSheet.Range("A1") 'Zelle mit Startdatum
'endAte = ActiveSheet.Range("B1") 'Zelle mit Enddatum
'Deklaration
Set myOlApp = CreateObject("Outlook.Application")
Set myOlSpace = myOlApp.GetNamespace("MAPI")
Set myOlFolder = myOlSpace.GetDefaultFolder(olFolderCalendar)
Set myOlDateRange = myOlFolder.Items.Restrict("[Start] >= '" & startDate & "' and [end] <= & '" & startDate + 1 & "'")
'Alternative mit Start- und Enddatum
'Set myOlDateRange = myOlFolder.Items.Restrict("[Start] >= '" & startDate & "' and [end] <= & '" & endDate & "'")
'Suche beginnen
myR = 2
'Löscht alle zellen in der aktiven Tabelle
Cells.ClearContents
Cells(1, 1) = "Termin"
Cells(1, 2) = "Dauer"
Cells(1, 3) = "Ende"
Cells(1, 4) = "Ort"
Cells(1, 5) = "Betreff"
Cells(1, 6) = "Textinfo"
'Alternativ mit Start- und EndDatum in Zeile 1
'Range(Cells(myR, 1), Cells(Rows.Count, 5)).ClearContents
'Cells(myR, 1) = "Termin"
'Cells(myR, 2) = "Dauer"
'Cells(myR, 3) = "Ort"
'Cells(myR, 4) = "Betreff"
'Cells(myR, 5) = "Textinfo"
'myR = myR + 1
For Each sAppoint In myOlDateRange
With sAppoint
'Termindaten eintragen
Cells(myR, 1) = Format(.Start, "dd.mm.yyyy hh:mm")
Cells(myR, 2) = .duration
Cells(myR, 3) = Format(.Start + (((1 / 24) / 60) * .duration), "hh:mm")
Cells(myR, 4) = .Location
Cells(myR, 5) = .Subject
Cells(myR, 6) = .Body
'Cells(myR, 6) = .Start
myR = myR + 1
End With
Next
'Variablen leeren
Set myOlApp = Nothing
Set myOlSpace = Nothing
Set myOlFolder = Nothing
MsgBox "Alle Termine für den " & startDate & " eingelesen!"
'Alternativ mit Start- und EndDatum
'MsgBox "Alle Termine für den Zeitraum vom " & startDate & " bis " & endDate & " eingelesen!"
End Sub

Gruss Rainer
Auch wenn Sam schon gezeigt, kann ich es wenigstens für meine HP brauchen ;-)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Outlook-Termine eines bestimmten Tages aufrufen


Schritt-für-Schritt-Anleitung

Um Outlook-Termine eines bestimmten Tages in Excel auszulesen, kannst Du folgenden VBA-Code verwenden. Dieser Code ermöglicht es Dir, ein Datum in einem Textfeld einzugeben und die entsprechenden Termine abzurufen.

  1. Öffne Excel und erstelle ein neues Arbeitsblatt.
  2. Füge ein Textfeld und einen Button hinzu, um das Datum einzugeben und den Code auszuführen.
  3. Öffne den VBA-Editor mit Alt + F11.
  4. Füge ein neues Modul hinzu und kopiere den folgenden Code hinein:
Sub OutlookTerminEinlesen()
    Dim outl As Object, Datum As Date
    Dim ns As Object, terminOrdner As Object, termine As Object, termin As Object
    Set outl = CreateObject("Outlook.Application")
    Set ns = outl.GetNamespace("MAPI")
    Set terminOrdner = ns.GetDefaultFolder(9) 'olFolderCalendar
    ' Filtere Termine dieses Tages
    Datum = Range("B1").Value
    Set termine = terminOrdner.Items.Restrict("[Start] >= '" & Format(Datum, "mm/dd/yyyy hh:mm") & "' and [Start] < '" & Format(Datum + 1, "mm/dd/yyyy hh:mm") & "'")
    Range("A6").Activate
    If Range("A6") <> "" Then Range(Range("A6"), Range("A6").End(xlDown)).EntireRow.Delete
    For Each termin In termine
        ActiveCell = termin.Subject
        ActiveCell.Offset(0, 1) = termin.Start
        ActiveCell.Offset(0, 2) = termin.End
        ActiveCell.Offset(1, 0).Activate
    Next termin
End Sub
  1. Weise dem Button die Funktion OutlookTerminEinlesen zu.
  2. Gebe ein Datum in Zelle B1 ein und klicke auf den Button, um die Termine abzurufen.

Häufige Fehler und Lösungen

  • Problem: Es werden keine Termine angezeigt.

    • Lösung: Stelle sicher, dass das Datum im richtigen Format eingegeben wird (mm/dd/yyyy). Überprüfe auch die Einstellungen in Outlook, insbesondere die Startzeit des Kalenders.
  • Problem: Mehrtägige Termine werden nicht angezeigt.

    • Lösung: Ändere die Restrict-Anweisung, sodass Start zweimal genutzt wird, um sicherzustellen, dass auch mehrtägige Termine erfasst werden.

Alternative Methoden

  1. Verwendung der Outlook-Suche: Du kannst auch den Outlook-Kalender direkt nach einem bestimmten Datum durchsuchen. Verwende die Suchleiste in Outlook und gib das Datum im Format dd.mm.yyyy ein.

  2. Serientermine filtern: Wenn Du Serientermine ab einem bestimmten Datum ändern oder anzeigen möchtest, kannst Du das mit der GetRecurrencePattern-Methode in VBA tun.


Praktische Beispiele

Hier ein Beispiel, wie Du mit dem VBA-Code alle Termine für einen bestimmten Tag einlesen kannst:

Sub Read_Control_Termin_to_Excel()
    Dim startDate As Date
    startDate = Range("B1").Value
    ' Hier wird der Outlook Kalender gefiltert
    ' ...
End Sub

Verwende den Code, um die Termine in die entsprechenden Zellen einzutragen.


Tipps für Profis

  • Wenn Du regelmäßig mit Outlook und Excel arbeitest, erwäge die Verwendung von Early Binding anstelle von Late Binding, um die Performance zu verbessern und Fehler zu vermeiden.
  • Achte darauf, die Zeitzonen in Outlook zu berücksichtigen, wenn Du Termine abfragst. Nutze die GetTimeZoneInformation-Methode, um die aktuelle Zeitzone zu ermitteln.

FAQ: Häufige Fragen

1. Wie kann ich die Uhrzeit ändern, wenn ich einen Termin vorschlage?
Du kannst die Uhrzeit im VBA-Code anpassen, indem Du die Start- und End-Eigenschaften der AppointmentItem-Objekte manipulierst.

2. Was mache ich, wenn es Probleme mit Serienterminen gibt?
Serientermine können komplex sein. Stelle sicher, dass Du die GetRecurrencePattern-Methode verwendest, um spezifische Instanzen eines Serientermins zu erhalten.

Mit diesen Anleitungen und Tipps bist Du gut gerüstet, um effektiv mit Outlook-Termine in Excel zu arbeiten!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige