09.05.2020, 11:59
Hallo zusammen,
darf ich Euch wieder einmal um Eure Hilfe bitten?
Termine aus einer Exceltabelle schreibe ich per vba in meinen Qutlook-Kalender.
Funktioniert auch alles super bis auf die Möglichkeit Termine in 3-monatigem Abstand zu schreiben.
Vielleicht kann mir jemand auf die Sprünge helfen was bei dem Case is = "Quartal" nicht stimmt.
Hier wird der generierte Termin nicht im Abstand von 3 Monaten eingetragen, sondern in drei folgende Monate hintereinander.
darf ich Euch wieder einmal um Eure Hilfe bitten?
Termine aus einer Exceltabelle schreibe ich per vba in meinen Qutlook-Kalender.
Funktioniert auch alles super bis auf die Möglichkeit Termine in 3-monatigem Abstand zu schreiben.
Vielleicht kann mir jemand auf die Sprünge helfen was bei dem Case is = "Quartal" nicht stimmt.
Hier wird der generierte Termin nicht im Abstand von 3 Monaten eingetragen, sondern in drei folgende Monate hintereinander.
Code:
'Serien-Termine eintragen
Sub Einfügen()
'adds a list of appontments to the Calendar in Outlook
Dim olApp As Outlook.Application
Dim olAppItem As Outlook.AppointmentItem
Dim OutApp As Object, apptOutApp As Object, oApp As Object, oAddr As Object, opattern As Object
Dim OutPattern As RecurrencePattern
Dim datStart As Date
Dim endRow As Long
Dim row As Long
Dim Alter
Dim Trepeat 'Wiederholungsschlüssel
Dim Dauer
Dim zeile As Long, Zeile1 As Long, Suchbegriff As Long
zeile = Range("A65536").End(xlUp).row
Set oApp = CreateObject("outlook.application")
Set oAddr = oApp.CreateItem(olAppointmentItem)
endRow = zeile
On Error Resume Next
Set olApp = GetObject("", "Outlook.Application")
On Error GoTo 0
If olApp Is Nothing Then
On Error Resume Next
Set olApp = GetObject("Outlook.Application")
On Error GoTo 0
If olApp Is Nothing Then
MsgBox "Outlook is not available!"
Exit Sub
End If
End If
For row = startRow To endRow
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(olAppointmentItem) 'olAppointmentItem)
'Wenn Termin bereits existiert dann nichts ändern
If (Cells(row, colDelRaster).Text = "x") Or (Cells(row, colDelRaster).Text = "X") Then GoTo Weiter
With apptOutApp
'set default appointment values
.AllDayEvent = True 'Ganztägig Beginn Tag x 00:00 Uhr bis Tag x+1 00:00 Uhr
.Subject = "No subject"
.Location = "Hier"
.Body = ""
.ReminderSet = True
'read appointment values from the worksheet
On Error Resume Next
.Subject = Cells(row, colSubject).Value
'Ort
.Location = Cells(row, colLocation).Value
.Start = Cells(row, colDatStart).Value + Cells(row, colTimeBeg).Value
.End = Cells(row, colDatEnd).Value + Cells(row, colTimeEnd).Value
'Duration
If (Cells(row, colTimeBeg).Value = 0) And (Cells(row, colTimeEnd).Value = 0) Then
'ganztägier Event
.AllDayEvent = True
Else
'Dauer in Minuten
Dauer = Abs(DateDiff("n", Cells(row, colTimeEnd).Value, Cells(row, colTimeBeg).Value))
.Duration = Dauer 'DateDiff("n", wksSheet.Cells(lngRow, 6).Value, wksSheet.Cells(lngRow, 5).Value)
End If
.ReminderMinutesBeforeStart = 720
'mit Sound
.ReminderPlaySound = True
'Farbkennzeichnung des Termins
.Categories = Cells(row, colColorKat).Value 'z.B. "Grüne Kategorie"
'Raster für Wiederholungen
Set OutPattern = apptOutApp.GetRecurrencePattern
Trepeat = Cells(row, colTRaster).Value
Select Case Trepeat
Case Is = "Jahr"
OutPattern.RecurrenceType = 5 'olRecursYearly 'wiederkehrender Termin
.GetRecurrencePattern.NoEndDate = False
OutPattern.Occurrences = Cells(row, colRepeat).Value 'x Wiederholungen
.Subject = Cells(row, colSubject).Value & ": " & Cells(row, colObject).Value & " (Wird " & Cells(row, colAlter).Value & " Jahre alt.)"
Cells(row, colTRaster - 1).Value = ""
'.GetRecurrencePattern.PatternStartDate = .Start = Cells(row, 3).Value '"Hier das Startdatum angeben."
'.GetRecurrencePattern.Interval = 1
'OutPattern.Occurrences = 2 'x Wiederholungen
'.GetRecurrencePattern.NoEndDate = True
' **** Fehlerhafter Teil ****
Case Is = "Quartal"
OutPattern.RecurrenceType = 3 'olRecursYearly 'Quartal - wiederkehrender Termin
OutPattern.RecurrenceType = olRecursMonthNth 'wiederkehrender Termin
OutPattern.Occurrences = Cells(row, colRepeat).Value 'x Wiederholungen
' **** Ende ****
Case Is = "Monat"
OutPattern.RecurrenceType = olRecursMonthly 'wiederkehrender Termin
Case Is = "Woche" 'mit fest vorgegebenem Wochentag - hier Dienstag
OutPattern.RecurrenceType = olRecursWeekly 'wiederkehrender Termin
OutPattern.DayOfWeekMask = olTuesday 'Wochentag
OutPattern.Occurrences = Cells(row, colRepeat).Value '31 'x Wiederholungen
'mit Sound
.ReminderPlaySound = True
'Farbkennzeichnung des Termins
'.OlCategoryColor = 5 'olCategoryColorGreen
.Categories = Cells(row, colColorKat).Value 'z.B. "Grüne Kategorie"
Case Is = "Tag"
OutPattern.RecurrenceType = olRecursDaily 'wiederkehrender Termin
OutPattern.Occurrences = Cells(row, colRepeat).Value '31 'x Wiederholungen
Case Is = "Serien-Tage" 'mit vorgegebenem Wochentag - abhängig vom angegebenen Starttag
OutPattern.RecurrenceType = olRecursWeekly 'wiederkehrender Termin
OutPattern.Occurrences = Cells(row, colRepeat).Value '31 'x Wiederholungen
Case Else
'MsgBox "Einige Termine wurden nicht angelegt!"
GoTo Weiter
End Select
.Duration = "2"
On Error GoTo 0
'.Save
.Save
ActiveSheet.Cells(row, colDelRaster) = "x"
ActiveSheet.Cells(row, colOLentryID) = .EntryID
Trepeat = 0
End With
Weiter:
Next
If Cells(row, colSubject).Value = "" Then Exit Sub
Set olAppItem = Nothing
Set olApp = Nothing
MsgBox "Alle Einzel & Serien-Termine wurden generiert"
End Sub