Startseite

Makro zum Übertragen der Termine

Hier nun das Makro, mit dessen Hilfe die Termine in das Kalenderblatt übertragen werden. Die einzelnen Zeilen habe ich mit kurzen Komentaren versehen. Ich hoffe das ist ausreichend verständlich. Sicher ist die Gliederung in zwei Hauptbereiche (Daten einlesen und Daten in den Kalender eintragen) zu erkennen. Weiter kann man sehen, das jeder dieser Teile wieder in drei Gruppen geliedert ist: Feiertage, Geburtstage und allgemeine Termine. Grundsätzlich ist es möglich, davon nur Teilbereiche zu nutzen, zum Beispiel die Ausgabe von Geburtstagen.
Entsprechend könnten dann die nicht benötigten Bereiche im Quelltext gelöscht werden. Im Übrigen auch hier wieder der Hinweis auf den Downloadbereich, wo die komplette Tabelle auch zur Verfügung steht.
Mai 2009 - Dieses Makro habe ich völlig neu geschrieben, es ist jetzt etwas kürzer und vor allem schneller.

Option Explicit

Sub Termine_eintragen()
'trägt vorgegebene Termine in die Kalenderblätter ein
'geschrieben von Klaus-Dieter Oppermann geschrieben am 16.03.99
'Stand: 31.05.2009 Makro neu geschrieben

Dim iZei As Integer                                                     ' Zielzeile für Termin
Dim iSp As Integer                                                      ' Zielspalte für Termin (Monat)
Dim intAnz As Integer                                                   ' Schleifenzähler füt Termine
Dim iLeZeile                                                            ' Letzte Kalenderzeile
Dim varMonArr As Variant                                                ' Monatsspalten
Application.ScreenUpdating = False                                      ' Bildschirmaktualisierunng aus
varMonArr = Array(1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23)            ' Kalenderspalten (Monate)
' Alte Einträge löschen
Range("B3:B33,D3:D33,F3:F33,H3:H33,J3:J33,L3:L33").ClearContents        ' alte Einträge löschen (1. Halbjahr)
Range("N3:N33,P3:P33,R3:R33,T3:T33,V3:V33,X3:X33").ClearContents        ' alte Einträge löschen (2. Halbjahr)
Range("A3:X33").Font.ColorIndex = 0                                     ' schwarze Schrift
' Neue Termine eintragen

' Da der Kalender nur einen Termin pro Tag anzeigen kann, werden die Einträge in der Reihenfolge des Makros
' ggf. überschrieben. Bei Bedarf können die Blöcke Feiertage, Geburtstage und sonstige Termine ausgetauscht
' werden. Der nächste Block überschreibt die / den vorhergehenden.

' sonstige Termine eintragen
For intAnz = 3 To Sheets("Termine").Range("E2").End(xlDown).Row         ' sonstige Termine einlesen
    iSp = varMonArr(Month(Sheets("Termine").Cells(intAnz, 5)) - 1)      ' Zielspalte festlegen
    iLeZeile = Sheets("Kalender").Cells(65536, iSp).End(xlUp).Row       ' letzte gefüllte Zelle
    iZei = CInt(Application.Match(Sheets("Termine").Cells(intAnz, 5) _
    , Range(Cells(3, iSp), Cells(iLeZeile, iSp)), 0))                   ' Zielzeile berechnen
    Sheets("Kalender").Cells(iZei + 2, iSp + 1) = Sheets("Termine") _
    .Cells(intAnz, 6)                                                   ' sonstigen Termin eintragen
Next intAnz                                                             ' nächster Termin
' Feiertage eintragen
For intAnz = 3 To Sheets("Termine").Range("A2").End(xlDown).Row         ' Feiertage einlesen
    iSp = varMonArr(Month(Sheets("Termine").Cells(intAnz, 1)) - 1)      ' Zielspalte festlegen
    iLeZeile = Sheets("Kalender").Cells(65536, iSp).End(xlUp).Row       ' Letzte gefüllte Zelle
    iZei = CInt(Application.Match(Sheets("Termine").Cells(intAnz, 1) _
    , Range(Cells(3, iSp), Cells(iLeZeile, iSp)), 0))                   ' Zielzeile berechnen
    Sheets("Kalender").Cells(iZei + 2, iSp + 1) = Sheets("Termine") _
    .Cells(intAnz, 2)                                                   ' Feiertag eintragen
    Range(Sheets("Kalender").Cells(iZei + 2, iSp), Sheets("Kalender") _
    .Cells(iZei + 2, iSp + 1)).Font.ColorIndex = 3                      ' Datum und Feiertag rot färben
  Next intAnz                                                           ' nächster Feiertag
' Geburtstage eintragen
For intAnz = 3 To Sheets("Termine").Range("C2").End(xlDown).Row         ' Geburtstage einlesen
    Sheets("Termine").Cells(1, 255) = DateSerial(Sheets("Kalender") _
    .Cells(1, 1), Month(Sheets("Termine").Cells(intAnz, 3)), _
    Day(Sheets("Termine").Cells(intAnz, 3)))                            ' Geburtstag auf aktuelles Jahr umrechnen
    iSp = varMonArr(Month(Sheets("Termine").Cells(intAnz, 3)) - 1)      ' Zielspalte festlegen
    iLeZeile = Sheets("Kalender").Cells(65536, iSp).End(xlUp).Row       ' letzte gefüllte Zelle
    iZei = CInt(Application.Match(Sheets("Termine").Cells(1, 255) _
    , Range(Cells(3, iSp), Cells(33, iSp)), 0))                         ' Zielzeile berechnen
    Sheets("Kalender").Cells(iZei + 2, iSp + 1) = "Geb. " & Sheets _
    ("Termine").Cells(intAnz, 4) & " (" & DateDiff("YYYY", Sheets _
    ("Termine").Cells(intAnz, 3), DateSerial(Sheets("Kalender") _
    .Cells(1, 1), 12, 31)) & ")"                                        ' Zelleneintrag berechnen und eintragen
    Sheets("Kalender").Cells(iZei + 2, iSp + 1).Font.ColorIndex = 5     ' blaue Farbe festlegen
Next intAnz                                                             ' nächster Geburtstag
Application.ScreenUpdating = True                                       ' Bildschirmaktualisierung ein
End Sub