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

Forumthread: Termine aus Excel in Outlook übertragen ?

Termine aus Excel in Outlook übertragen ?
13.11.2008 23:18:00
Selma
Hallo Leute,
ich habe folgendes Makro gefunden, das mir die Termine (Geburtstage) aus Excel in Outlook als Termin überträgt.
In der Spalte A stehen die Namen und in Spalte B die Geburtstage.
Da es hier um Geburtstage handelt, sollen die Termine sich jährlich wiederholen.
Was muss ich ändern, um daraus einen Serientermin (jährlich) zu erstellen?

Sub Termin_nach_Outlook()
'Verweis auf Microsoft Outlook x.x Object Library muss gesetzt sein
'Gehe auf EXTRAS / VERWEIS und suche die entsprechende Library
Dim OutApp As Object, apptOutApp As Object
'Hier beginnen die Termine
Range("B2").Select
Do Until ActiveCell.Value = ""
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem)
With apptOutApp
'Datum und Uhrzeit
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " 08:00"
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
'Termininfo
.Subject = "Geburtstag von: " & ActiveCell.Offset(0, -1).Value
'oder der Betreff steht in der Spalte rechts von den Terminen
'Zusätzlicher Text
.Body = ""
'ort
.Location = "geboren am:" & " " & ActiveCell.Offset(0, 0).Value
.Duration = "5"
'Erinnerung
.ReminderMinutesBeforeStart = 10
'mit Sound
.ReminderPlaySound = True
'Erinnerung wiederholen
.ReminderSet = True
.Categories = "Geburtstage"
'Termin speichern
.Save
End With
'Nächste Zelle auswählen
ActiveCell.Offset(1, 0).Select
'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal
Set apptOutApp = Nothing
Set OutApp = Nothing
Loop
MsgBox "Termine an Outlook übertragen!"
End Sub


Besten Dank im Voraus !
Liebe Grüße,
Selma

Anzeige

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 09:21:00
Werner
Hallo Selma,
versuch mal folgendes, indem Du in der With-Anweisung nachfolgenden Code eingibst:
    With apptOutApp
        '..... 
        Set jedesJahr = neuerTermin.GetRecurrencePattern   ' wiederkehrender Termin 
        jedesJahr.RecurrenceType = olRecursYearly          ' wiederkehrender Termin 
        '.... 
    End With


Gruß
Werner

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 09:58:00
Selma
Hallo Werner,
es geht auch nicht:

Sub Termin_nach_Outlook()
Dim OutApp As Object, apptOutApp As Object
'Hier beginnen die Termine
Range("B2").Select
Do Until ActiveCell.Value = ""
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem)
With apptOutApp
'Datum und Uhrzeit
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " 08:00"
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
'Termininfo
.Subject = "Geburtstag von: " & ActiveCell.Offset(0, -1).Value
'oder der Betreff steht in der Spalte rechts von den Terminen
'Zusätzlicher Text
.Body = ""
'ort
.Location = "geboren am:" & " " & ActiveCell.Offset(0, 0).Value
.Duration = "5"
'Erinnerung
.ReminderMinutesBeforeStart = 10
'mit Sound
.ReminderPlaySound = True
'Erinnerung wiederholen
Set jedesJahr = neuerTermin.GetRecurrencePattern   ' wiederkehrender Termin
jedesJahr.RecurrenceType = olRecursYearly          ' wiederkehrender Termin
.ReminderSet = True
.Categories = "Geburtstage"
'Termin speichern
.Save
End With
'Nächste Zelle auswählen
ActiveCell.Offset(1, 0).Select
'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal
Set apptOutApp = Nothing
Set OutApp = Nothing
Loop
MsgBox "Termine an Outlook übertragen!"
End Sub


LG,
Selma

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 10:00:11
Werner
Hallo Selma,
sorry, Fehler von mir!
Hier der komplette Code, damit müsste es gehen.
Dim OutApp As Object, apptOutApp As Object
Dim OutPattern As RecurrencePattern

'Hier beginnen die Termine 
Range("B2").Select
Do Until ActiveCell.Value = ""
    Set OutApp = CreateObject("Outlook.Application")
    Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem) 
        With apptOutApp
            'Datum und Uhrzeit 
            .Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " 08:00"
            'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen 
            'Termininfo 
            .Subject = "Geburtstag von: " & ActiveCell.Offset(0, -1).Value
            'oder der Betreff steht in der Spalte rechts von den Terminen 
            'Zusätzlicher Text 
            .Body = ""
            'ort 
            '######################## eingefügt ########################### 
             Set OutPattern = apptOutApp.GetRecurrencePattern
             OutPattern.RecurrenceType = olRecursYearly
            '############################################################## 
            .Location = "geboren am:" & " " & ActiveCell.Offset(0, 0).Value
            .Duration = "5"
            'Erinnerung 
            .ReminderMinutesBeforeStart = 10
            'mit Sound 
            .ReminderPlaySound = True
            'Erinnerung wiederholen 
            .ReminderSet = True
            .Categories = "Geburtstage"
            'Termin speichern 
            .Save
        End With
    'Nächste Zelle auswählen 
    ActiveCell.Offset(1, 0).Select
    'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal 
    Set apptOutApp = Nothing
    Set OutApp = Nothing
Loop
MsgBox "Termine an Outlook übertragen!"
End Sub


Gruß
Werner

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 10:18:29
Selma
Hallo Werner,
hier Dim OutPattern As RecurrencePattern bleibt das Makro hängen und es kommt folgende Fehlermeldung:
Fehler beim Kompilieren
Benutzerdefinierter Typ nicht definiert

LG,
Selma
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 10:24:00
Werner
...hast Du unter:
Userbild
auch
Userbild
mit aufgenommen?
Gruß
Werner
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 11:15:57
Selma
Hallo Werner,
ja, der Verweis ist aufgenommen und trotzdem geht es nicht.
LG,
Selma
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 11:49:42
Selma
Hallo Werner,
mit deiner Datei funktioniert es ;)
Gibt es die Möglichkeit beim erneutem Ausführen des Makros die bereits eingetragene Termine nicht nochmal einzutragen?
Vielen Dank !
LG,
Selma
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
14.11.2008 11:55:00
Werner
Hallo Selma,
bestimmt, habe aber leider keine Zeit mehr, daher lasse ich die Frage weiter offen.
LG
Werner
AW: Termine aus Excel in Outlook übertragen ?
16.11.2008 00:12:53
Werner
Hallo Selma,
ich habe mich eben noch mal kurz an Dein Problem gewagt.
Option Explicit


Function AppointmentExists(ByVal objOutlook As Object, ByVal datStart As Date, ByVal strSubject As String) As Boolean
   Dim objMapiFolder As Object
   Dim objCalendarItem As Object
   AppointmentExists = True
   Set objMapiFolder = objOutlook.GetNamespace("MAPI").GetDefaultFolder(9)  ' 9 = olFolderCalendar 
   For Each objCalendarItem In objMapiFolder.Items
      If objCalendarItem.Subject = strSubject And _
         Month(objCalendarItem.Start) = Month(datStart) And _
         Day(objCalendarItem.Start) = Day(datStart) Then
         Exit Function
      End If
   Next objCalendarItem
   AppointmentExists = False
End Function


Private Sub Termin_nach_Outlook_Click()
Dim OutApp As Object, apptOutApp As Object
Dim OutPattern As RecurrencePattern
Dim objOutlook As Object
Dim objAppointmentItem As Object
   Dim datStart As Date
   Dim strSubject As String
   Dim lngZeile As Long
'Hier beginnen die Termine 
Range("B2").Select
lngZeile = 2
Do Until Cells(lngZeile, 1).Value = ""
    datStart = Cells(lngZeile, 2).Value & " 08:00:00"
    strSubject = "Geburtstag von: " & Cells(lngZeile, 1).Value

    Set OutApp = CreateObject("Outlook.Application")
    Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem) 
        If Not AppointmentExists(OutApp, datStart, strSubject) Then
        With apptOutApp
            'Datum und Uhrzeit 
            .Start = datStart
            'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen 
            'Termininfo 
            .Subject = strSubject
            'oder der Betreff steht in der Spalte rechts von den Terminen 
            'Zusätzlicher Text 
            .Body = ""
            'ort 
            '######################## eingefügt ########################### 
             Set OutPattern = apptOutApp.GetRecurrencePattern
             OutPattern.RecurrenceType = olRecursYearly
            '############################################################## 
            .Location = "geboren am:" & " " & datStart
            .Duration = "5"
            'Erinnerung 
            .ReminderMinutesBeforeStart = 10
            'mit Sound 
            .ReminderPlaySound = True
            'Erinnerung wiederholen 
            .ReminderSet = True
            .Categories = "Geburtstage"
            'Termin speichern 
            .Save
        End With
      End If
    'Nächste Zelle auswählen 
    'ActiveCell.Offset(1, 0).Select 
    lngZeile = lngZeile + 1
    'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal 
    Set apptOutApp = Nothing
    Set OutApp = Nothing
   Set objOutlook = Nothing
Loop
   'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal 
   MsgBox "Termine übertragen"
End 
Dieser VBA-Code prüft alle Outlook-Termine auf Subjekt (Bezeichnung) und Datum ohne Start, also Tag, Monat und Jahr.
Ich habe das deswegen so eingestellt, dass die Plausikontrolle unabhängig von der Uhrzeit ist.
Diese ist aber im Objekt: "objCalendarItem.Start" enthalten.
Daher die Extrahierung nach Tag, Monat und Jahr.
So werden die Daten nur einmalig übernommen.
hier die Datei:
https://www.herber.de/bbs/user/56819.xls
Alle anderen Anpassungen müsstest Du noch übernehmen.
Der VBA-Code ist nach Deinem Beispiel aufgebaut, also Spalte "A" = Subjekt (Bezeichnung, bzw. hier der Name) und in Spalte "B" das Datum.
Du könntest den Code erweitern, indem Du z.B. in Spalte "C" die Dauer eingibst etc. pp.
Gruß
Werner
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
16.11.2008 00:12:59
Werner
Hallo Selma,
ich habe mich eben noch mal kurz an Dein Problem gewagt.
Option Explicit


Function AppointmentExists(ByVal objOutlook As Object, ByVal datStart As Date, ByVal strSubject As String) As Boolean
   Dim objMapiFolder As Object
   Dim objCalendarItem As Object
   AppointmentExists = True
   Set objMapiFolder = objOutlook.GetNamespace("MAPI").GetDefaultFolder(9)  ' 9 = olFolderCalendar 
   For Each objCalendarItem In objMapiFolder.Items
      If objCalendarItem.Subject = strSubject And _
         Month(objCalendarItem.Start) = Month(datStart) And _
         Day(objCalendarItem.Start) = Day(datStart) Then
         Exit Function
      End If
   Next objCalendarItem
   AppointmentExists = False
End Function


Private Sub Termin_nach_Outlook_Click()
Dim OutApp As Object, apptOutApp As Object
Dim OutPattern As RecurrencePattern
Dim objOutlook As Object
Dim objAppointmentItem As Object
   Dim datStart As Date
   Dim strSubject As String
   Dim lngZeile As Long
'Hier beginnen die Termine 
Range("B2").Select
lngZeile = 2
Do Until Cells(lngZeile, 1).Value = ""
    datStart = Cells(lngZeile, 2).Value & " 08:00:00"
    strSubject = "Geburtstag von: " & Cells(lngZeile, 1).Value

    Set OutApp = CreateObject("Outlook.Application")
    Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem) 
        If Not AppointmentExists(OutApp, datStart, strSubject) Then
        With apptOutApp
            'Datum und Uhrzeit 
            .Start = datStart
            'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen 
            'Termininfo 
            .Subject = strSubject
            'oder der Betreff steht in der Spalte rechts von den Terminen 
            'Zusätzlicher Text 
            .Body = ""
            'ort 
            '######################## eingefügt ########################### 
             Set OutPattern = apptOutApp.GetRecurrencePattern
             OutPattern.RecurrenceType = olRecursYearly
            '############################################################## 
            .Location = "geboren am:" & " " & datStart
            .Duration = "5"
            'Erinnerung 
            .ReminderMinutesBeforeStart = 10
            'mit Sound 
            .ReminderPlaySound = True
            'Erinnerung wiederholen 
            .ReminderSet = True
            .Categories = "Geburtstage"
            'Termin speichern 
            .Save
        End With
      End If
    'Nächste Zelle auswählen 
    'ActiveCell.Offset(1, 0).Select 
    lngZeile = lngZeile + 1
    'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal 
    Set apptOutApp = Nothing
    Set OutApp = Nothing
   Set objOutlook = Nothing
Loop
   'Variablen leeren,... sonst "kotzt" Outlook irgendwann mal 
   MsgBox "Termine übertragen"
End 
Dieser VBA-Code prüft alle Outlook-Termine auf Subjekt (Bezeichnung) und Datum ohne Start, also Tag, Monat und Jahr.
Ich habe das deswegen so eingestellt, dass die Plausikontrolle unabhängig von der Uhrzeit ist.
Diese ist aber im Objekt: "objCalendarItem.Start" enthalten.
Daher die Extrahierung nach Tag, Monat und Jahr.
So werden die Daten nur einmalig übernommen.
hier die Datei:
https://www.herber.de/bbs/user/56819.xls
Alle anderen Anpassungen müsstest Du noch übernehmen.
Der VBA-Code ist nach Deinem Beispiel aufgebaut, also Spalte "A" = Subjekt (Bezeichnung, bzw. hier der Name) und in Spalte "B" das Datum.
Du könntest den Code erweitern, indem Du z.B. in Spalte "C" die Dauer eingibst etc. pp.
Gruß
Werner
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
16.11.2008 23:14:06
Selma
Vielen Dank Werner !
Liebe Grüße,
Selma
AW: Termine aus Excel in Outlook übertragen ?
17.11.2008 06:46:00
Werner
Hallo Selma,
hier noch mal die Datei, jedoch als ganztägiger Serien-Termin. (Geburtstag)
Der VBA-Code erkennt ob der Serientermin noch vorhanden ist.
Wird aus einer Terminreihe "nur" ein Termin gelöscht, wird auch kein neuer eingetragen.
https://www.herber.de/bbs/user/56843.xls
Microsoft Excel Objekt Tabelle1
Option Explicit 
 
 
Function OutTerminExist(ByVal OutApp As Object, ByVal datStart As Date, ByVal strSubject As String) As Boolean 
    Dim OutMapiFolder As Object 
    Dim OutCalendarItem As Object 
    OutTerminExist = True 
    Set OutMapiFolder = OutApp.GetNamespace("MAPI").GetDefaultFolder(9)  ' 9 = olFolderCalendar 
    For Each OutCalendarItem In OutMapiFolder.Items 
        If OutCalendarItem.Subject = strSubject And _
            Month(OutCalendarItem.Start) = Month(datStart) And _
            Day(OutCalendarItem.Start) = Day(datStart) Then 
            Exit Function 
        End If 
    Next OutCalendarItem 
    OutTerminExist = False 
End Function 
 
 
Private Sub Termin_nach_Outlook_Click() 
    Dim OutApp As Object 
    Dim apptOutApp As Object 
    Dim OutPattern As RecurrencePattern 
    Dim datStart As Date 
    Dim strSubject As String 
    Dim lngZeile As Long 
    lngZeile = 2                                             '1. Zeile der Geburtstagseinträge der Exceltabelle 
    Do Until Cells(lngZeile, 1).Value = "" 
        Set OutApp = CreateObject("Outlook.Application") 
        Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem) 
        datStart = Cells(lngZeile, 2).Value '  & " 08:00:00" 
        strSubject = "Geburtstag von: " & Cells(lngZeile, 1).Value 
        If Not OutTerminExist(OutApp, datStart, strSubject) Then 
            With apptOutApp 
                .Start = datStart                            'Datum und Uhrzeit 
                .AllDayEvent = True                          ' für ganztägig 
                .Subject = strSubject 
                .Body = "" 
                Set OutPattern = apptOutApp.GetRecurrencePattern 
                OutPattern.RecurrenceType = olRecursYearly  ' wiederkehrender Termin 
                .Location = "geboren am:" & " " & datStart 
                .Duration = "5" 
                .ReminderMinutesBeforeStart = 10             'Erinnerung 
                .ReminderPlaySound = True                    'mit Sound 
                .ReminderSet = True                          'Erinnerung wiederholen 
                .Categories = "Geburtstage" 
                .Save                                        'Termin speichern 
            End With 
            Cells(lngZeile, 3).Value = "eingetragen" 
        Else: 
            Cells(lngZeile, 3).Value = "vorhanden!" 
        End If 
        lngZeile = lngZeile + 1 
        'Variablen leeren 
        Set apptOutApp = Nothing 
        Set OutApp = Nothing 
    Loop 
    MsgBox "Termine übertragen" 
End Sub 
 
 
 
 
 
 


Gruß
Werner

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
17.11.2008 16:35:58
Selma
Vielen, vielen Dank !
Liebe Grüße,
Selma
AW: Termine aus Excel in Outlook übertragen ?
17.11.2008 16:48:00
Selma
Hallo Werner,
noch eine Ergänzung... Wenn ich nur Tag und Monat kenne. Das Jahr nicht.
Sollte als Jahr 1900 eingetragen werden, um zu vermeiden das es zum Debug kommt.
Der Geburtstag soll trotzdem eingetragen werden.
Geht das überhaupt ?
Liebe Grüße,
Selma
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 00:10:00
Werner
Hallo Selma,
ja, ergänze einfach den Code
mit:
Year(OutCalendarItem.Start) > 1900 And _

Function OutTerminExist(ByVal OutApp As Object, ByVal datStart As Date, ByVal strSubject As  _
String) As Boolean
Dim OutMapiFolder As Object
Dim OutCalendarItem As Object
OutTerminExist = True
Set OutMapiFolder = OutApp.GetNamespace("MAPI").GetDefaultFolder(9)  ' 9 = olFolderCalendar  _
For Each OutCalendarItem In OutMapiFolder.Items
If OutCalendarItem.Subject = strSubject And _
Year(OutCalendarItem.Start) > 1900 And _
Month(OutCalendarItem.Start) = Month(datStart) And _
Day(OutCalendarItem.Start) = Day(datStart) Then
Exit Function
End If
Next OutCalendarItem
OutTerminExist = False
End Function


Gruß
Werner

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 09:08:00
Selma
Hallo Werner,
ich habe in Zelle B15 dies stehen: 27.08.
Nachdem ich das Makro ausgeführt habe, wird das Termin in Outlook als 31.05.1907 (richtig wäre 27.08.1900) eingetragen.
Beim zweiten Ausführen des Makros steht in Zelle C15 "eingetragen", anstatt "vorhanden" ;)
Woran liegt das ?
Liebe Grüße,
Selma
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 11:12:35
Werner
Hallo Selma,
dann ist die von Dir genannte Zelle kein Datumsformat.
Da Du ja einen wiederkehrenden Termin eingestellt hast, ist das Jahr eigentlich egal, aber Du müsstest zumindest die Kurzform als Datum eintragen.
Was kommt den in Excel für ein Ergebnis, wenn Du in Zelle D15 mal folgende Formel einträgst:
=Jahr(C15)
Gruß
Werner
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 12:27:00
Selma
Hallo Werner,
die Zellen in Spalte B sind als TT.MM.JJJJ formatiert.
Mit der Formel =Jahr(B15) in Zelle D15 bekomme ich #WERT, wenn das Datum in Spalte B z.B. so 27.08. eingetragen ist.
Liebe Grüße,
Selma
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 12:38:00
Werner
Hallo Selma,
ja, genau das habe ich gemeint.
Das gleiche "Problem" hat Outlook, bzw. kein Problem, sondern Outlook "übersetzt" diese Zahl(!) in ein Datum, welches es aber nicht ist. (Siehe Deine Zelle #WERT), in Deinem Beispiel den 27.05.?
Du musst dieser Celle das richtige Datum schreiben, mit Jahresangabe, wie in den anderen Zellen auch.
Dann käuft das Makro auch richtig.
Das der VBA-Code neben dieser Zelle schreibt "scgon vorhanden", liegt daran, dass Outlook natürlich immer wieder das falsche Datum "27.05." nimmt und hier ein wiederkehrenden Termin erstellt, bzw. erstellen will, der dann schon vorhanden ist.
Gruß
Werner
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 12:55:00
Selma
Hallo Werner,
da ich manchmal die Jahresangabe nicht weiß, wäre es vielleicht besser beim vorhandenen TT.MM. (ohne Jahresangabe) JJJJ durch 1900 einzutragen und nachdem das Makro ausgeführt ist 1900 durch nichts ersetzen.
Beispiel vor dem Ausführen des Makros (bei fehlende Jahresangabe):
27.08.
Beispiel Ausführen des Makros (bei fehlende Jahresangabe):
27.08.1900
Beispiel nachdem Ausführen des Makros (bei fehlende Jahresangabe):
27.08.
Könntest du dies bitte in Code ergänzen?
Vielen Dank !
Liebe Grüße,
Selma
Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 13:20:21
Werner
Hallo Selma,
hier der Code:
Microsoft Excel Objekt Tabelle1
Option Explicit 
  
  
Function OutTerminExist(ByVal OutApp As Object, ByVal datStart As Date, ByVal strSubject As String) As Boolean 
    Dim OutMapiFolder As Object 
    Dim OutCalendarItem As Object 
    OutTerminExist = True 
    Set OutMapiFolder = OutApp.GetNamespace("MAPI").GetDefaultFolder(9)  ' 9 = olFolderCalendar 
    For Each OutCalendarItem In OutMapiFolder.Items 
        If OutCalendarItem.Subject = strSubject And _
            Month(OutCalendarItem.Start) = Month(datStart) And _
            Day(OutCalendarItem.Start) = Day(datStart) Then 
            Exit Function 
        End If 
    Next OutCalendarItem 
    OutTerminExist = False 
End Function 
  
  
Private Sub Termin_nach_Outlook_Click() 
    Dim OutApp As Object 
    Dim apptOutApp As Object 
    Dim OutPattern As RecurrencePattern 
    Dim datStart As Date 
    Dim strSubject As String 
    Dim lngZeile As Long 
    Dim ohneJahr 
    lngZeile = 2                                             '1. Zeile der Geburtstagseinträge der Exceltabelle 
    ohneJahr = False 
    Do Until Cells(lngZeile, 1).Value = "" 
        Set OutApp = CreateObject("Outlook.Application") 
        Set apptOutApp = OutApp.CreateItem(1)                'olAppointmentItem) 
        If Right(Cells(lngZeile, 2).Value, 1) = "." Then     'keine Jahresangabe 
           datStart = Cells(lngZeile, 2).Value & "1900" 
           ohneJahr = True 
        Else: 
           datStart = Cells(lngZeile, 2).Value ' & " 08:00:00" 
           ohneJahr = False 
        End If 
        strSubject = "Geburtstag von: " & Cells(lngZeile, 1).Value 
        If Not OutTerminExist(OutApp, datStart, strSubject) Then 
            With apptOutApp 
                .Start = datStart                            'Datum und Uhrzeit 
                .AllDayEvent = True                          ' für ganztägig 
                .Subject = strSubject 
                .Body = "" 
                Set OutPattern = apptOutApp.GetRecurrencePattern 
                OutPattern.RecurrenceType = olRecursYearly  ' wiederkehrender Termin 
                If ohneJahr Then 
                   .Location = Cells(lngZeile, 2).Value & " Jahr unbekannt!" 
                Else: 
                   .Location = "geboren am:" & " " & datStart 
                End If 
                .Duration = "5" 
                .ReminderMinutesBeforeStart = 10             'Erinnerung 
                .ReminderPlaySound = True                    'mit Sound 
                .ReminderSet = True                          'Erinnerung wiederholen 
                .Categories = "Geburtstage" 
                .Save                                        'Termin speichern 
            End With 
            Cells(lngZeile, 3).Value = "eingetragen" 
        Else: 
            Cells(lngZeile, 3).Value = "vorhanden!" 
        End If 
        lngZeile = lngZeile + 1 
        'Variablen leeren 
        Set apptOutApp = Nothing 
        Set OutApp = Nothing 
    Loop 
    MsgBox "Termine übertragen" 
End Sub 


Gruß
werner

Anzeige
AW: Termine aus Excel in Outlook übertragen ?
18.11.2008 14:33:47
Selma
Hallo Werner,
super Idee mit "Jahr unbekannt". Besser als 1900 ;)
Wenn ich das Jahr hinterher kenne, gibt es die Möglichkeit das Termin mit "Geburtstag von: xxxxxxxx" (steht in Outlook im Betreff) in Outlook zu löschen oder "geboren am: xxxxx" (steht in Outlook im Termin-/Besprechungsort) zu aktualisieren?
Liebe Grüße,
Selma
Anzeige
In Outllook über die Suchfunktion gehen...
18.11.2008 15:22:00
Werner
Hallo Selma,
in der Kalenderansicht auf:
Extras
--Suchen
--erweiterte Suche gehen

und dort die "unbekannten Jahre" herausfiltern und diejenigen löschen.
Dann, in Excel wieder das Makro, mit erneuerten Jahrszahlen, starten.
Gruß
Werner
AW: In Outllook über die Suchfunktion gehen...
18.11.2008 16:52:00
Selma
Hallo Werner,
vielen, vielen Dank !
Liebe Grüße,
Selma
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Geburtstage aus Excel in Outlook importieren


Schritt-für-Schritt-Anleitung

Um Geburtstage aus Excel in Outlook zu importieren, folge diesen Schritten:

  1. Vorbereitung der Excel-Datei:

    • Stelle sicher, dass die Excel-Datei die Geburtstage in Spalte A (Namen) und Spalte B (Geburtstage) enthält.
    • Das Datumsformat sollte TT.MM.JJJJ sein.
  2. VBA-Makro erstellen:

    • Öffne VBA-Editor in Excel (ALT + F11).
    • Füge ein neues Modul hinzu und kopiere den folgenden Code hinein:
    Sub Termin_nach_Outlook()
       Dim OutApp As Object, apptOutApp As Object
       Dim OutPattern As RecurrencePattern
       Dim datStart As Date
       Dim strSubject As String
       Dim lngZeile As Long
       Dim ohneJahr As Boolean
    
       lngZeile = 2 ' Erste Zeile der Geburtstagsliste
    
       Do Until Cells(lngZeile, 1).Value = ""
           Set OutApp = CreateObject("Outlook.Application")
           Set apptOutApp = OutApp.CreateItem(1) ' olAppointmentItem
    
           If Right(Cells(lngZeile, 2).Value, 1) = "." Then
               datStart = Cells(lngZeile, 2).Value & " 1900"
               ohneJahr = True
           Else
               datStart = Cells(lngZeile, 2).Value
               ohneJahr = False
           End If
    
           strSubject = "Geburtstag von: " & Cells(lngZeile, 1).Value
    
           If Not AppointmentExists(OutApp, datStart, strSubject) Then
               With apptOutApp
                   .Start = datStart
                   .AllDayEvent = True
                   .Subject = strSubject
                   .Body = ""
                   Set OutPattern = .GetRecurrencePattern
                   OutPattern.RecurrenceType = olRecursYearly ' Wiederkehrender Termin
                   If ohneJahr Then
                       .Location = Cells(lngZeile, 2).Value & " Jahr unbekannt!"
                   Else
                       .Location = "geboren am: " & datStart
                   End If
                   .ReminderMinutesBeforeStart = 10
                   .ReminderPlaySound = True
                   .ReminderSet = True
                   .Categories = "Geburtstage"
                   .Save
               End With
               Cells(lngZeile, 3).Value = "eingetragen"
           Else
               Cells(lngZeile, 3).Value = "vorhanden!"
           End If
    
           lngZeile = lngZeile + 1
           Set apptOutApp = Nothing
           Set OutApp = Nothing
       Loop
    
       MsgBox "Termine übertragen!"
    End Sub
    
    Function AppointmentExists(ByVal OutApp As Object, ByVal datStart As Date, ByVal strSubject As String) As Boolean
       Dim OutMapiFolder As Object
       Dim OutCalendarItem As Object
       AppointmentExists = True
       Set OutMapiFolder = OutApp.GetNamespace("MAPI").GetDefaultFolder(9) ' 9 = olFolderCalendar
       For Each OutCalendarItem In OutMapiFolder.Items
           If OutCalendarItem.Subject = strSubject And _
              Month(OutCalendarItem.Start) = Month(datStart) And _
              Day(OutCalendarItem.Start) = Day(datStart) Then
               Exit Function
           End If
       Next OutCalendarItem
       AppointmentExists = False
    End Function
  3. Makro ausführen:

    • Speichere die Datei als Excel-Arbeitsmappe mit Makros (*.xlsm).
    • Führe das Makro Termin_nach_Outlook aus, um die Geburtstage in Outlook zu importieren.

Häufige Fehler und Lösungen

  • Fehler: "Benutzerdefinierter Typ nicht definiert":

    • Stelle sicher, dass der Verweis auf die Microsoft Outlook Object Library gesetzt ist. Gehe zu Extras > Verweise im VBA-Editor und aktiviere die entsprechende Library.
  • Fehler: Termine werden doppelt eingetragen:

    • Überprüfe, ob die Funktion AppointmentExists korrekt implementiert ist, um bereits bestehende Termine zu erkennen.

Alternative Methoden

  • Direktes Importieren:

    • Du kannst auch Excel-Daten als CSV exportieren und diese dann in Outlook importieren. Gehe zu Datei > Öffnen und wähle die CSV-Datei aus. Folge den Anweisungen zum Importieren.
  • Verwendung von Power Query:

    • Mit Power Query kannst du Daten aus Excel abrufen und in Outlook integrieren, allerdings benötigst du dafür die entsprechende Lizenz und Version.

Praktische Beispiele

  • Beispiel: Geburtstagsliste:

    • Erstelle eine Excel-Tabelle mit Namen und Geburtstagen. Füge das Makro hinzu und führe es aus, um die Termine in Outlook einzutragen.
  • Wiederkehrende Termine:

    • Mit dem oben genannten Makro kannst du auch wiederkehrende Termine in Outlook anlegen, was besonders nützlich ist für Geburtstage, die jährlich wiederkehren.

Tipps für Profis

  • Jährliche Erinnerungen:

    • Stelle sicher, dass du Erinnerungen für die Geburtstage in Outlook einstellst, um keine wichtigen Daten zu verpassen.
  • Automatisierung:

    • Du kannst das Makro so anpassen, dass es automatisch beim Öffnen der Excel-Datei ausgeführt wird, um die Geburtstage stets aktuell zu halten.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um andere Termine zu importieren? Du kannst das Makro anpassen, indem du die Spalten für Namen und Daten änderst und die Betreffzeile entsprechend anpasst.

2. Funktioniert das Makro in allen Excel-Versionen? Das Makro sollte in Excel 2010 und neueren Versionen funktionieren. Achte darauf, dass die Microsoft Outlook Object Library verfügbar ist.

3. Was passiert, wenn ich die Jahreszahl nicht kenne? Das Makro fügt standardmäßig das Jahr 1900 hinzu, wenn kein Jahr angegeben ist. Du kannst dies im Code ändern, um "Jahr unbekannt!" anzuzeigen.

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