Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ferien Start und Ende per VBA eintragen

Ferien Start und Ende per VBA eintragen
05.03.2020 07:01:17
Uwe
Hallöchen ihr Lieben :)
Die Datei, welche ihr hier seht, ist nur ein Teil eines größeren Komplexes, doch dieser Teil bereitet mir Kopfschmerzen, denn im Moment weiß ich nicht wie ich den Anfang und das Ende der Ferien eintragen kann per VBA oder per Funktion.
Klar einfach wäre es per Hand, aber ich möchte einfach nur den blauen Knopf drücken oder, wenn möglich, soll es automatisch geschehen, wenn bei C3 das Datum TT/MM/JAHR eingegeben wird.
Über eine Hilfe würde ich mich freuen. Bin leider noch nicht so fit in VBA programmieren.
Achja, die Feiertage werden schon per VBA eingetragen und die 1. der Monate geschieht über eine einfache Formel.
https://www.herber.de/bbs/user/135626.xlsx
Vielen lieben Dank
Uwe
PS.: Die

Sub für die Feiertage ist hier zu sehen.

Sub Feiertage()
Dim d As Integer
Dim Bereich As Range
Dim Zelle As Range
Dim Jahr As Date
Dim Neujahr As Date
Dim Karfreitag As Date
Dim Ostersonntag As Date
Dim Ostermontag As Date
Dim Maifeiertag As Date
Dim Himmelfahrt As Date
Dim Pfingstsonntag As Date
Dim Pfingstmontag As Date
Dim TagDeutscheEinheit As Date
Dim ErsterWeihnachtstag As Date
Dim ZweiterWeihnachtstag As Date
Dim Fronleichnam As Date
Dim Reformationstag As Date
Dim Bussbettag As Date
Jahr = DatePart("yyyy", Worksheets("Grundeingabe").Cells(4, 3).Value)
Neujahr = DateSerial(Jahr, 1, 1)
d = (((255 - 11 * (Jahr Mod 19)) - 21) Mod 30) + 21
Ostersonntag = DateSerial(Jahr, 3, 1) + d + (d > 48) + 6 - ((Jahr + Jahr \ 4 + d + (d > 48) + 1) _
Mod 7)
Maifeiertag = DateSerial(Jahr, 5, 1)
Karfreitag = Ostersonntag - 2
Ostermontag = Ostersonntag + 1
Himmelfahrt = Ostersonntag + 39
'Pfingstsonntag = Ostersonntag + 49
Pfingstmontag = Ostersonntag + 50
TagDeutscheEinheit = DateSerial(Jahr, 10, 3)
ErsterWeihnachtstag = DateSerial(Jahr, 12, 25)
ZweiterWeihnachtstag = DateSerial(Jahr, 12, 26)
'Fronleichnam = DateSerial(Jahr, 6, 23)
Reformationstag = DateSerial(Jahr, 10, 31)
Bussbettag = DateSerial(Jahr, 11, 22) - (DateSerial(Jahr, 11, 18) Mod 7)
Cells(21, 3) = Neujahr
Cells(23, 3) = Ostermontag
Cells(22, 3) = Karfreitag
Cells(24, 3) = Maifeiertag
Cells(25, 3) = Himmelfahrt
Cells(26, 3) = Pfingstmontag
Cells(27, 3) = TagDeutscheEinheit
Cells(28, 3) = Reformationstag
Cells(29, 3) = Bussbettag
Cells(30, 3) = ErsterWeihnachtstag
Cells(31, 3) = ZweiterWeihnachtstag
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Ferien Start und Ende per VBA eintragen
05.03.2020 07:13:39
SF
Hola,
die Ferienzeiten werden festgelegt, die kann man nicht berechnen.
Gruß,
steve1da
AW: Ferien Start und Ende per VBA eintragen
05.03.2020 07:36:02
Uwe
Ich weiß, dass die Ferien festgelegt werden, doch die kann man bestimmt mit irgendeiner Verlinkung durch VBA eintragen lassen.
Grüßle Uwe
Und woher nehmen, wenn nicht stehlen? (owT)
05.03.2020 07:41:03
EtoPHG

Anzeige
AW: Und woher nehmen, wenn nicht stehlen? (owT)
05.03.2020 10:07:30
volti
Hallo Uwe,
hier mal eine Idie, woher und wie Du die Ferien (zunächst in eine Tabelle) bekommen kannst....
Vielleicht hilft es Dir ja weiter.
Option Explicit
Sub HoleFerienAusWEB()
 With ThisWorkbook.Sheets("Tabelle1")
  .Select
  .Cells.Clear
  LadeIETabelle3 .Range("$A$1"), "http://www.kalenderpedia.de/ferien/ferien-2020.html"
 End With
End Sub
Sub LadeIETabelle3(rZiel As Range, sUrl As String)
'Tabelle aus einer WEB-Anwendung kopieren (KHV Okt 2018)
 Dim oIE As Object, sArr() As String
 Dim iZeile As Long, iSpalte As Long, iAnzZl As Long, iAnzSp As Long
 Set oIE = CreateObject("InternetExplorer.application")
 oIE.Navigate2 sUrl
 oIE.Visible = False
 While Not oIE.ReadyState = 4: DoEvents: Wend
 With oIE.document.all.tags("table")(4)
  iAnzZl = .Rows.Length - 1
  iAnzSp = .Rows(0).Cells.Length - 1
  ReDim sArr(iAnzZl, iAnzSp)
  For iZeile = 0 To iAnzZl
   For iSpalte = 0 To iAnzSp
     sArr(iZeile, iSpalte) = .Rows(iZeile).Cells(iSpalte).innerText
   Next iSpalte
  Next iZeile
 End With
 rZiel.Resize(iAnzZl, iAnzSp).value = sArr()
 oIE.Quit
 Set oIE = Nothing
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Und woher nehmen, wenn nicht stehlen? (owT)
07.03.2020 21:02:15
Uwe
Huhuchen...
Danke für den Tip, hab es ausprobiert, aber leider kann ich innerhalb der Tabelle nicht auf die einzelnen Daten zugreifen um dann den Start oder das Ende automatisch einzutragen.
Ich werde wahrscheinlich bei der manuellen Eintragung bleiben. Alles andere funktioniert nun gut.
Jedoch bin ich gerade am Überlegen eine

Sub zu schreiben, welche das Verzeichnis durchschaut nach Dateien mit einem Dateinamen als der  _
aktuelle, zum Beispiel:
aktuelle Datei heißt: Dienstpläne - Urlaubsübersicht - 2020.xlsm
die neu generierte Datei würde dann: Dienstpläne - Urlaubsübersicht - 2021.xlsm
heißen.
Es sollte folgendermaßen funktionieren:
Die 

Sub durchsucht das Verzeichnis nach der "höheren" Datei, wenn das System keine gefunden hat,  _
dann soll eine neue generiert werden, wenn er eine findet, dann soll er die 

Sub verlassen. Im Moment sieht mein Code folgendermaßen aus, aber es funzt nicht so, wie es  _
soll:

Sub Test()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder("f:\Programmieren")
Set fdateien = fVerz.Files
For Each fDatei In fdateien
If InStr(fDatei, "") 

Jemand vielleicht eine Idee?
Grüßle Uwe
Anzeige
AW: Ferien Start und Ende per VBA eintragen
10.03.2020 16:33:56
Dieter
Hallo Uwe,
du kannst die Ferien der einzelnen Bundesländer jeweils als ics-Datei von der folgenden Web-Site herunterladen:
https://www.ferienwiki.de/exports/de
In der Anlage füge ich dir eine Arbeitsmappe bei, in welcher per VBA ein Jahreskalender für ein auswählbares Bundesland erstellt wird, der neben den Feiertagen auch die Ferien des gewählten Bundeslandes enthält. Das Programm entnimmt die Ferientermine aus den zugehörigen ics-Dateien.
https://www.herber.de/bbs/user/135750.xlsm
Viele Grüße
Dieter
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ferienzeiten in Excel automatisiert eintragen


Schritt-für-Schritt-Anleitung

Um Ferienzeiten in Excel automatisch einzutragen, kannst du VBA verwenden. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub FerienEintragen()
        Dim StartDatum As Date
        Dim EndDatum As Date
        Dim Jahr As Integer
    
        Jahr = Year(Date)
    
        ' Hier die Start- und Enddaten der Ferien eintragen
        StartDatum = DateSerial(Jahr, 7, 1) ' Beispiel: 1. Juli
        EndDatum = DateSerial(Jahr, 8, 31) ' Beispiel: 31. August
    
        ' Eintrag in Excel
        Sheets("Ferien").Cells(1, 1).Value = "Ferien"
        Sheets("Ferien").Cells(2, 1).Value = StartDatum
        Sheets("Ferien").Cells(2, 2).Value = EndDatum
    End Sub
  4. Ändere die Daten für StartDatum und EndDatum entsprechend deinen Bedürfnissen.

  5. Schließe den VBA-Editor und führe das Makro aus, indem du ALT + F8 drückst und das Makro "FerienEintragen" auswählst.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"
    Lösung: Stelle sicher, dass die Zellen, in die du schreibst, im richtigen Datentyp (Datum) formatiert sind.

  • Fehler: Makro wird nicht gefunden
    Lösung: Überprüfe, ob das Makro im richtigen Modul gespeichert wurde und ob es im aktiven Arbeitsblatt aufgerufen wird.

  • Fehler: Datumsformat nicht korrekt
    Lösung: Achte darauf, dass du das richtige Datumsformat verwendest, das in deinen Excel-Einstellungen festgelegt ist.


Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die folgenden Methoden nutzen:

  1. Formeln: Nutze Excel-Formeln, um Ferien automatisch zu berechnen. Beispiel:

    =DATUM(JAHR(A1);7;1)  ' Startdatum der Ferien
    =DATUM(JAHR(A1);8;31) ' Enddatum der Ferien
  2. Datenimport: Verwende Websites wie ferienwiki oder kalenderpedia, um Schulferien automatisch in Excel zu importieren.


Praktische Beispiele

  • Ferien für das Jahr 2024: Wenn du die Schulferien für das Jahr 2024 eintragen möchtest, kannst du den obigen VBA-Code anpassen, um die Daten aus einer externen Quelle zu importieren oder manuell einzutragen.

  • Ferien in Excel importieren: Verwende die Funktion Daten > Externe Daten abrufen, um Ferienzeiten aus einer CSV- oder XLSX-Datei, die von einer Website bereitgestellt wird, zu importieren.


Tipps für Profis

  • Nutze Named Ranges für eine bessere Übersicht und einfachere Anpassungen in deinem VBA-Code.
  • Automatisiere deine Excel-Datei mit Triggern, die das Makro bei bestimmten Ereignissen ausführen, z. B. beim Öffnen der Datei oder Ändern einer Zelle.
  • Halte deine Daten immer aktuell, indem du regelmäßig die neuesten Ferientermine von Websites wie schulferien.org überprüfst.

FAQ: Häufige Fragen

1. Wie kann ich Ferienzeiten für verschiedene Bundesländer eintragen?
Du kannst separate VBA-Module für jedes Bundesland erstellen und die entsprechenden Daten manuell anpassen oder automatisch von Webseiten importieren.

2. Gibt es eine Möglichkeit, Ferienzeiten automatisch zu berechnen?
Ja, du kannst Formeln in Excel verwenden, um Ferien basierend auf dem aktuellen Datum zu berechnen. VBA bietet jedoch mehr Flexibilität und Automatisierungsmöglichkeiten.

3. Wo finde ich die aktuellen Schulferien für 2024?
Die aktuellen Schulferien kannst du auf Websites wie kalenderpedia 2024 oder ferienwiki finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige