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

Forumthread: Outlook - Excel durch VBA verbinden

Outlook - Excel durch VBA verbinden
Melek
Hallo!
Habe in diesem Forum diese Frage bereits mehrmals gestellt.
Ich öffne in Outlook 2003 einen vergangenen Termin z.B. eines Kunden und vergebe einen neuen. Jetzt
mache ich in dem großen Textfeld einige Notizen bzgl. des Termins. Diese Einträge (bzw. immer die letzten)
sollen dann in eine Excel-Datei kopiert werden, welche fortlaufend die Notizen zu dem Kunden enthält.
Da steht z.B. 1.Termin mit Herrn M. ... dann per link in eine Excel-Datei und dann in die letzte Zeile ... 1. Termin mit Herrn M.
Kann ich diesen Vorgang mit einem VBA-Code bewerkstelligen?
Vielen Dank im voraus!
LG Melek
Anzeige

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

Betreff
Benutzer
Anzeige
Keine Antwort, nur Orientierungshilfe
25.09.2009 11:57:21
MichaV
Hallo Melek,
ich bewundere Deine Geduld.
Hier mal die Historie, damit mgl. Antworter über bereits erfolgte Lösungsversuche orientiert sind.
https://www.herber.de/forum/archiv/1104to1108/t1105514.htm (unbeantwortet, offen)
https://www.herber.de/forum/archiv/1104to1108/t1105095.htm (noch offen)
https://www.herber.de/forum/archiv/1104to1108/t1104287.htm (ins OT abgeglitten)
https://www.herber.de/forum/archiv/1100to1104/t1103705.htm
Gruß- Micha
Anzeige
Outlook-Termine nach Excel
26.09.2009 12:52:41
Christian
Hallo,
hier ein Ansatz wie du alle Termin aus deinem Standard Outlook Kalender nach Excel auslesen kannst.
Im Bsp. wird der Betreff, der Inhalt und das Datum übertragen.
Wenn du nur die Daten eines einzelnen Termins benötigst, so müsstest du das im Code noch einbauen, z.B nach einem bestimmten Datum zu suchen.
Im VBE-Editor muss der Verweis auf "Microsoft Outlook xx Object Library" gesetzt sein.
Gruß
Christian

Option Explicit
Sub GetCalenderItems()
Dim objOL As Outlook.Application
Dim objApt As Outlook.AppointmentItem
Dim i&
On Error Resume Next
Set objOL = New Outlook.Application
With Sheets("Tabelle1")
.Cells.Delete
For Each objApt In objOL.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar).Items
i = i + 1
.Cells(i, 1) = objApt.Subject
.Cells(i, 2) = objApt.Body
.Cells(i, 3) = objApt.Start
Next
End With
On Error GoTo 0
End Sub

Anzeige
AW: Outlook-Termine nach Excel
27.09.2009 23:36:23
Melek
Hallo Christian,
vielen Dank. Das hilft mir schon ein Bisschen weiter. Wie kann ich es jetzt schaffen, Termine eines bestimmten Betreffs in die entsprechende Excel-Datei zu kopieren: z.B. möchte ich die Gesprächsnotizen von Herrn Mustermann in die Excel-Datei Mustermann kopieren und die Gesprächsnotizen von Frau Schmidt in die Excel-Datei Schmidt.
Ich müsste also den Betreff in den Code einbauen. Aber wie? Geht das überhaupt?
Vielen Dank!!!
LG Melek
Anzeige
AW: Outlook-Termine nach Excel
28.09.2009 12:16:38
Christian
Hallo,
...Ich müsste also den Betreff in den Code einbauen..., ja, aber der Betreff muss in Outlook-Terminen ja nicht eindeutig sein. Und wenn es mehrere Termine mit dem gleichen Betreff gibt, woher weißt der Code dann, welcher der richtige ist.
Es gibt aber eine "EntryID" für jeden Eintrag. die erhälst du zB mit:
.Cells(i, 4) = objApt.EntryID
Du musst also zu den Betreffs die ID's verwalten und kannst dann den Inhalt in deine jeweilige Datei kopieren.
Gruß
Christian
Anzeige
AW: Outlook-Termine nach Excel
28.09.2009 12:38:59
Melek
Hallo Christian,
doch die Betreffs sind eindeutig. Und ich will eben immer von dem Outlook-Eintrag des bestimmten Kunden in die Excel-Datei dieses Kunden. Es existieren zu jedem Kunden in Outlook entsprechende Excel-Dateien und da will ich dann direkt in die letzte freie Zeile und den Text, den ich zuletzt in Outlook reingeschrieben habe, hineinkopiert haben (das mache ich bis jetzt alles manuell).
Ich versuche mal mit der "EntryID" weiterzukommen, habe aber bis jetzt keinerlei Ahnung wie.
LG Melek
Anzeige
AW: Outlook-Termine nach Excel
28.09.2009 21:22:44
Christian
hallo Melek,
wenn der Betreff jedesmal exakt gleich ist, könnte man alle Termine mit diesem Betreff auslesen und davon jenen mit dem neuesten Datum ermitteln.
Hier ein Ansatz - In Spalte A ab Zeile 2 stehen deine "Betreffs"
in den Spalten B bis D wird der Betreff, dass jüngste Datum und die letzte Zeile des Inhalts aufgeführt.
Die Übertragung in diverse Dateien ist ein anderes Thema, erst mal muss das Auslesen ja passen.
Wie zuvor muss der Verweis auf Outlook im VBE Editor gesetzt sein (das kann man später auch umgehen, ist aber bei der Entwicklung ganz hilfreich).
Gib mir Bescheid, wie du damit zurecht kommst.
Gruß
Christian

Option Explicit
Sub GetAppointmentItems()
Dim objOL As Outlook.Application
Dim objAptItem As Outlook.AppointmentItem
Dim strAptItem$(), dblDate#, i&, j&, vLine
On Error GoTo ErrorHandler
With Sheets("Tabelle1")
.Columns(2).Resize(, 3).Clear
Set objOL = New Outlook.Application
For j = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
dblDate = 0
ReDim strAptItem(2)
For Each objAptItem In objOL.GetNamespace("MAPI").GetDefaultFolder(9).Items
If objAptItem.Subject = .Cells(j, 1).Text Then
If CDbl(objAptItem.Start) > dblDate Then
dblDate = CDbl(objAptItem.Start)
strAptItem(0) = objAptItem.Subject
strAptItem(1) = objAptItem.Start
strAptItem(2) = objAptItem.Body
End If
End If
Next
vLine = Split(strAptItem(2), vbCrLf)
For i = UBound(vLine) To 0 Step -1
If Len(Trim(vLine(i))) Then
strAptItem(2) = Trim(vLine(i))
Exit For
End If
Next
.Cells(j, 2).Resize(, 3).Value = strAptItem
Next
End With
Exit Sub
ErrorHandler:
MsgBox Err.Description & vbLf & Err.Number
Err.Clear
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Excel und Outlook durch VBA verknüpfen


Schritt-für-Schritt-Anleitung

Um Excel mit Outlook zu verknüpfen und Termine aus dem Outlook-Kalender in eine Excel-Tabelle zu übertragen, kannst du folgende Schritte befolgen:

  1. Öffne Microsoft Excel und erstelle eine neue Arbeitsmappe.

  2. Gehe zum Visual Basic for Applications (VBA) Editor: Drücke ALT + F11.

  3. Füge einen neuen Modul hinzu: Klicke im Menü auf Einfügen > Modul.

  4. Setze den Verweis auf die Outlook-Bibliothek: Gehe zu Extras > Verweise und aktiviere „Microsoft Outlook xx Object Library“.

  5. Füge den folgenden VBA-Code ein:

    Option Explicit
    Sub GetCalenderItems()
       Dim objOL As Outlook.Application
       Dim objApt As Outlook.AppointmentItem
       Dim i As Long
       On Error Resume Next
       Set objOL = New Outlook.Application
       With Sheets("Tabelle1")
           .Cells.Delete
           For Each objApt In objOL.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar).Items
               i = i + 1
               .Cells(i, 1) = objApt.Subject
               .Cells(i, 2) = objApt.Body
               .Cells(i, 3) = objApt.Start
           Next
       End With
       On Error GoTo 0
    End Sub
  6. Führe das Skript aus: Drücke F5 oder gehe auf Ausführen > Sub/UserForm ausführen.

Dieser Code liest alle Termine aus dem Standard-Outlook-Kalender aus und überträgt sie in die Excel-Tabelle.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden": Überprüfe, ob der Verweis auf die Outlook-Bibliothek korrekt gesetzt ist.
  • Keine Daten in Excel: Stelle sicher, dass du die richtigen Berechtigungen für den Zugriff auf deinen Outlook-Kalender hast.
  • VBA-Code wird nicht ausgeführt: Prüfe, ob Makros in deinem Excel aktiviert sind.

Alternative Methoden

Wenn du Excel und Outlook verknüpfen möchtest, kannst du auch Makros verwenden, um spezifische Daten zu übertragen. Eine Alternativlösung wäre:

  • Power Query: Nutze Power Query in Excel, um Daten aus Outlook abzurufen, falls du eine neuere Version hast.
  • Add-Ins: Es gibt verschiedene Excel-Add-Ins, die eine Verknüpfung zu Outlook anbieten.

Praktische Beispiele

Falls du spezifische Termine nach Excel übertragen möchtest, kannst du den folgenden VBA-Code verwenden:

Sub GetAppointmentItems()
    Dim objOL As Outlook.Application
    Dim objAptItem As Outlook.AppointmentItem
    Dim strAptItem() As String, dblDate As Double, i As Long, j As Long
    On Error GoTo ErrorHandler
    With Sheets("Tabelle1")
        .Columns(2).Resize(, 3).Clear
        Set objOL = New Outlook.Application
        For j = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            dblDate = 0
            ReDim strAptItem(2)
            For Each objAptItem In objOL.GetNamespace("MAPI").GetDefaultFolder(9).Items
                If objAptItem.Subject = .Cells(j, 1).Text Then
                    If CDbl(objAptItem.Start) > dblDate Then
                        dblDate = CDbl(objAptItem.Start)
                        strAptItem(0) = objAptItem.Subject
                        strAptItem(1) = objAptItem.Start
                        strAptItem(2) = objAptItem.Body
                    End If
                End If
            Next
            .Cells(j, 2).Resize(, 3).Value = strAptItem
        Next
    End With
    Exit Sub
ErrorHandler:
    MsgBox Err.Description & vbLf & Err.Number
    Err.Clear
End Sub

Dieser Code ermöglicht es dir, Termine nach Betreff in eine Excel-Tabelle zu übertragen.


Tipps für Profis

  • Verwende die EntryID: Um spezifische Termine zu identifizieren, ist es sinnvoll, die EntryID des Termins zu speichern.
  • Automatisiere die Synchronisation: Du kannst auch eine geplante Aufgabe in Windows erstellen, um das Skript regelmäßig auszuführen.
  • Verwende Kommentare im Code: Dies hilft dir und anderen Benutzern, die Funktionsweise des Codes besser zu verstehen.

FAQ: Häufige Fragen

1. Wie kann ich Excel mit Outlook Kalender verbinden?
Du kannst dies über VBA tun, indem du Outlook-Objekte in Excel verwendest, wie in den obigen Beispielen gezeigt.

2. Gibt es eine Möglichkeit, spezifische Termine nach Excel zu übertragen?
Ja, du kannst den Betreff der Termine im VBA-Code abfragen und nur die relevanten Einträge in die Excel-Tabelle schreiben.

3. Funktioniert dies in allen Excel-Versionen?
Die beschriebenen Methoden sind in Excel-Versionen ab 2003 verfügbar, solange die Outlook-Bibliothek unterstützt wird.

4. Was ist die EntryID und wie nutze ich sie?
Die EntryID ist eine eindeutige Kennung für jeden Outlook-Eintrag. Du kannst sie verwenden, um spezifische Termine zu identifizieren und zu speichern.

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