Hallo zusammen,
hätte schon wieder eine Frage an dieses tolle Forum.
Ich möchte aufgelistete Termine aus einem Tabellenblatt mittels VBA in den Qutlook-Kalender schreiben.
Im Netzt habe ich verschiedene Vorschläge gefunden die ich aber gerne noch etwas verändert hätte.
Mit dem folgenden Makro werden alle Termine von Excel nach Outlook übergeben. Das funktioniert sehr gut.
Bei der Übertragung jeden Termins wird in die letzte Excel-Spalte des jeweiligen Termins die EntryID geschrieben.
Es soll bei einer Änderung eines Termins und der neuen Übertragung der alte Termin gelöscht werden um Doppeleinträge zu vermeiden.
Bzw. wie kann ich einen Löschvorgang für alle im Tabellenblatt aufgelisteten Termine in Outlook starten?
Gibt es eine Möglichkeit noch die Farb-Kategorie von Excel nach Outlook zu übergeben?
So hier nun das Makro:
Vielen Dank für alle Tipps!
hätte schon wieder eine Frage an dieses tolle Forum.
Ich möchte aufgelistete Termine aus einem Tabellenblatt mittels VBA in den Qutlook-Kalender schreiben.
Im Netzt habe ich verschiedene Vorschläge gefunden die ich aber gerne noch etwas verändert hätte.
Mit dem folgenden Makro werden alle Termine von Excel nach Outlook übergeben. Das funktioniert sehr gut.
Bei der Übertragung jeden Termins wird in die letzte Excel-Spalte des jeweiligen Termins die EntryID geschrieben.
Es soll bei einer Änderung eines Termins und der neuen Übertragung der alte Termin gelöscht werden um Doppeleinträge zu vermeiden.
Bzw. wie kann ich einen Löschvorgang für alle im Tabellenblatt aufgelisteten Termine in Outlook starten?
Gibt es eine Möglichkeit noch die Farb-Kategorie von Excel nach Outlook zu übergeben?
So hier nun das Makro:
Code:
Sub Excel_Control_Termin_nach_Outlook()
Dim wksSheet As Worksheet
Dim objFolder As Object
Dim objOutApp As Object
Dim objTermin As Object
Dim lngRow As Long
Dim LMinuten As Long
On Error GoTo Fin
Set wksSheet = ThisWorkbook.Worksheets("Spielpläne_VB") ' Anpassen!!!
Set objOutApp = CreateObject("Outlook.Application")
'9 = olFolderCalendar
Set objFolder = objOutApp.GetNamespace("MAPI").GetDefaultFolder(9)
For lngRow = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Not fncPointExist(objFolder, wksSheet.Cells(lngRow, 2).Value) Then
Set objTermin = objOutApp.CreateItem(1)
'LMinuten = Format(wksSheet.Cells(lngRow, 4).Value, "h.mm")
With objTermin
'Starttermin (hier bswp.: Datum der Zelle um 14 Uhr)
'.Start = Format(wksSheet.Cells(lngRow, 2).Value, "dd.mm.yyyy") & " 14:00"
.Start = Format(wksSheet.Cells(lngRow, 2).Value, "dd.mm.yyyy") & " " & wksSheet.Cells(lngRow, 3).Value
'Ende des Termins
'.End = Format(wksSheet.Cells(lngRow, 2).Value, "dd.mm.yyyy") & " 20:00"
'.End = Format(wksSheet.Cells(lngRow, 2).Value, "dd.mm.yyyy") '& " " & wksSheet.Cells(lngRow, 4).Value
'.Subject = wksSheet.Cells(lngRow, 2).Value
.Subject = wksSheet.Cells(lngRow, 1).Value
'Inhalt des Termins
.Body = "Das macht Spass!"
'Ort
.Location = wksSheet.Cells(lngRow, 5).Value & " - " & wksSheet.Cells(lngRow, 6).Value
'Dauer in Minuten
.Duration = wksSheet.Cells(lngRow, 4).Value
'Erinnerung vor Start in Minuten
.ReminderMinutesBeforeStart = 10
'Sound abspielen
.ReminderPlaySound = True
'Erinnerung setzen
.ReminderSet = True
'Speichern
.Save
wksSheet.Cells(lngRow, 7) = .EntryID
End With
Set objTermin = Nothing
End If
Next lngRow
Fin:
If Err.Number <> 0 Then MsgBox "Fehler: " & _
Err.Number & " " & Err.Description
Set objFolder = Nothing
Set objTermin = Nothing
Set objOutApp = Nothing
If Err.Number = 0 Then MsgBox "Termine nach Outlook übertragen!"
End Sub
Private Function fncPointExist(ByVal objTMP As Object, _
ByVal strSubject As String) As Boolean
Dim objItem As Object
For Each objItem In objTMP.Items
If objItem.Subject = strSubject Then fncPointExist = True
Next
End Function
Vielen Dank für alle Tipps!