Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Feiertage mit VBA hervorheben

Feiertage mit VBA hervorheben
11.11.2006 14:25:15
Nils
Habe nun erfolgreich mein Dienstplan mit Excel erstellt.
http://www.clumsy-net.de/dienstplan.zip
Auf dem Tabellenblatt "Daten" habe ich die gesetzlichen Feiertage berechnet!
Was ich mir nun vorstelle ist folgendes:
Mit VBA programmieren und alle Zellen aller Blätter mit den berechneten Feiertagen vergleichen, bei gefundener Übereinstimmung, den Text "Feiertag" in die Zelle UNTER das Datum schreiben.
Siehe Beispiel:
http://www.clumsy-net.de/beispiel.jpg
Die Zelle mit dem gefundenem Datum und die Zelle darüber mit dem Wochentag soll dann hellgrau ausgefüllt werden.
Ist das möglich?
Kann mir da jemand helfen?

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Feiertage mit VBA hervorheben
11.11.2006 21:28:31
Peter
Hallo Nils,
ich habe dir ein Makro zum Markieren der Feiertage eingefügt.
Im Blatt 'Daten' findest du den Button zu Starten.
Die Texte Feiertag werden allerdings Groß und Fett eingetragen, weil das Zellenformat offensichtlich so ist.
https://www.herber.de/bbs/user/38088.xls
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Feiertage mit VBA hervorheben
11.11.2006 22:13:41
fcs
Hallo Nils,
hier mein Vorschlag zur Feiertagsmarkierung. Dabei wird auch die etwas zu große Schrift für den Eintrag mit korrigiert. Es werden zuerst evtl. vorhandenen Feiertagsmarkierungen gesucht und gelöscht, dann die neuen eingetragen.
MakroCode in ein Modul der Datei kopieren.
Gruss
Franz

Sub Feiertagemarkieren()
Dim wksDaten As Worksheet, wksMonat As Worksheet, Feiertag As Variant, Zelle As Range
Dim Zeile As Long, Monat As Integer
Set wksDaten = Worksheets("Daten")
Zeile = 14 '1. Zeile mit Feiertag in Spalte G Blatt Daten
'vorhandene (alte) Feiertagseinträge löschen
For Monat = 1 To 12
Set wksMonat = Worksheets("A-" & Format(I, "00"))
For Each Zelle In wksMonat.Range("C20:G32")
If Zelle.Value = "Feiertag" Then
Zelle.ClearContents
Zelle.Font.Size = 18
Zelle.Offset(-2, 0).Range("A1:A2").Interior.ColorIndex = xlNone 'keine Farbe
End If
Next
Next
'Feiertage markieren
Do
Feiertag = wksDaten.Cells(Zeile, "G")
If Feiertag = 0 Then Exit Do
Set wksMonat = Worksheets("A-" & Format(Month(Feiertag), "00"))
For Each Zelle In wksMonat.Range("C19:G31")
If Zelle.Value = Feiertag Then
Zelle.Offset(1, 0).Value = "Feiertag"
Zelle.Offset(1, 0).Font.Size = 12
Zelle.Offset(-1, 0).Range("A1:A2").Interior.ColorIndex = 20 'Hellgrau
End If
Next
Zeile = Zeile + 2
Loop
End Sub

Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 10:11:34
Peter
Hallo Nils,
hier noch einmal - nun mit Dokumentation, löschen der Vorjahres-Einträge, farbigmachen der Feiertage.
https://www.herber.de/bbs/user/38094.xls
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Feiertage mit VBA hervorheben
12.11.2006 13:08:30
Nils
Erst einmal vielen Dank für Eure Mühen, habe gerade die Vorschläge ausprobiert.
der Vorschlag von "fcs" funtioniert nicht, fehler bei:
Set wksMonat = Worksheets("A-" & Format(I, "00"))
Die 2. Variante von Peter Feustel gefällt mir schon sehr gut, nur zwei Kleinigkeiten stören mich noch:
Die Zelle in der "Feiertag" steht wird hier farbig hevorgehoben, kannst du anstatt dessen die beiden Zellen mit Wochentag und Datum farbig hevorheben?
Das zweite wäre die Ausrichtung des Textes "Feiertag", die Zellen sind auf "zentriert und zentriert" (vertikal und horizontal), Schriftgröße 18 und fett standardmäßig eingestellt. Diese Einstellung ist wichtig für die Verwendung des Dienstplanes. Der Text "Feiertag" sollte aber "zentriert und oben" ausgerichtet werden, außerdem schriftgröße 10 und fett. Bei erneuter Ausführung des Makros und dem Löschvorgang vorhandener Feiertage müsste hier der Standard wieder hergestellt werden, also "zentriert und zentriert", Schriftgröße 18 und fett.
Das wäre dann alles, ansonsten topp Makro!!!
Vielen dank für eure mühen.
ich find die angebotene hilfe hier im forum vorbildlich, echt klasse!
Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 13:35:12
fcs
Hallo Nils,
da hatte ich leider zum Schluss vergessen in dieser Zeile die variable "I" in "Monat" umzubenennen.
Die Fontgröße und vertikale Ausrichtung für "Feiertag" hab ich mit eingebaut.
Gruss
Franz

Sub Feiertagemarkieren()
Dim wksDaten As Worksheet, wksMonat As Worksheet, Feiertag As Variant, Zelle As Range
Dim Zeile As Long, Monat As Integer
Set wksDaten = Worksheets("Daten")
Zeile = 14 '1. Zeile mit Feiertag in Spalte G Blatt Daten
'vorhandene (alte) Feiertagseinträge löschen
For Monat = 1 To 12
Set wksMonat = Worksheets("A-" & Format(Monat, "00"))
For Each Zelle In wksMonat.Range("C20:G32")
If Zelle.Value = "Feiertag" Then
Zelle.ClearContents
Zelle.VerticalAlignment = xlVAlignCenter
Zelle.Font.Size = 18
Zelle.Offset(-2, 0).Range("A1:A2").Interior.ColorIndex = xlNone 'keine Farbe
End If
Next
Next
'Feiertage markieren
Do
Feiertag = wksDaten.Cells(Zeile, "G")
If Feiertag = 0 Then Exit Do
Set wksMonat = Worksheets("A-" & Format(Month(Feiertag), "00"))
For Each Zelle In wksMonat.Range("C19:G31")
If Zelle.Value = Feiertag Then
Zelle.Offset(1, 0).Value = "Feiertag"
Zelle.Offset(1, 0).Font.Size = 10
Zelle.Offset(1, 0).VerticalAlignment = xlVAlignTop
Zelle.Offset(-1, 0).Range("A1:A2").Interior.ColorIndex = 20 'Hellgrau
End If
Next
Zeile = Zeile + 2
Loop
End Sub

Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 18:18:50
Nils
Ich habe jetzt 12 neue Tabellenblätter hinzugefügt, und plötzlich funktioniert das Makro nicht mehr :(
http://www.clumsy-net.de/Dienstplan.zip
AW: Feiertage mit VBA hervorheben
12.11.2006 18:37:18
Nils
ok, es liegt am Blattschutz, ist er deaktiviert, gehts wieder! allerdings funktionniert das makro bei einem weiterem Dienstplan für die Spätschicht nicht mehr vernünftig!
er makiert mir Zelle E51 im Arbeitsblatt "A-01" als Feiertag... obwohl er dort garnicht nach einem Feiertag suchen soll!
PS:
Muss der Laufindex nun auch geändert werden? weil ich ja jtzt mehr Arbeitsblätter habe, und im Makro steht noch "1 to 12"
Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 18:39:44
Nils
da die blätter in zukunft geschützt werden sollen, frage ich mich, wie man das dem makro beibringen soll, so dass es immer noch funktioniert?!
AW: Feiertage mit VBA hervorheben
12.11.2006 20:04:55
fcs
Hallo Nils,
das mit der Zelle E51 war ein kleienr Programmierfehler meinerseits. Ist nun bereinigt.
Blattschutz wird Makro jetzt auch verarbeitet. Ist das Blatt geschützt, dann deaktivert das Makro ihn vorübergehend und schaltet ihn nach der bearbeitung wieder ein.
Laufindex:
Der Laufindex 1 bis 12 muß bleiben, er wird benötigt, um aus dem Feiertagsdatum den zugehörigen Blattnamen zu bestimmen.
Ich hab eine zusätzliche Schleife für die Schichten eingebaut. Falls es auch noch eine Nachtschicht geben sollte, dann muss du im Makro in der 4. Zeile das Array erweitern um einen Eintrag für die 2 Zeichen, die vor der Monatszahl stehen.
Gruss
Franz

Sub Feiertagemarkieren()
Dim wksDaten As Worksheet, wksMonat As Worksheet, Feiertag As Variant, Zelle As Range
Dim Zeile As Long, Monat As Integer, Bereich As Range
Dim Schichten, i As Integer, Schutz As Boolean
Schichten = Array("A-", "Z-")
Set wksDaten = Worksheets("Daten")
Zeile = 14 '1. Zeile mit Feiertag in Spalte G Blatt Daten
'vorhandene (alte) Feiertagseinträge löschen
For Monat = 1 To 12
For i = 0 To UBound(Schichten)
Set wksMonat = Worksheets(Schichten(i) & Format(Monat, "00"))
If wksMonat.ProtectContents = True Then
wksMonat.Unprotect
Schutz = True
Else
Schutz = False
End If
Set Bereich = Application.Union(wksMonat.Range("C20:G32"), wksMonat.Range("C67:G79"))
For Each Zelle In Bereich
If Zelle.Value = "Feiertag" Then
Zelle.ClearContents
Zelle.VerticalAlignment = xlVAlignCenter
Zelle.Font.Size = 18
Zelle.Offset(-2, 0).Range("A1:A2").Interior.ColorIndex = xlNone 'keine Farbe
End If
Next
If Schutz = True Then wksMonat.Protect
Next i
Next
'Feiertage markieren
Do
Feiertag = wksDaten.Cells(Zeile, "G")
If Feiertag = 0 Then Exit Do
For i = 0 To UBound(Schichten)
Set wksMonat = Worksheets(Schichten(i) & Format(Month(Feiertag), "00"))
If wksMonat.ProtectContents = True Then
wksMonat.Unprotect
Schutz = True
Else
Schutz = False
End If
Set Bereich = Application.Union(wksMonat.Range("C19:G31"), wksMonat.Range("C66:G78"))
For Each Zelle In Bereich
If Zelle.Value = Feiertag Then
Zelle.Offset(1, 0).Value = "Feiertag"
Zelle.Offset(1, 0).Font.Size = 10
Zelle.Offset(1, 0).VerticalAlignment = xlVAlignTop
Zelle.Offset(-1, 0).Range("A1:A2").Interior.ColorIndex = 15 'Hellgrau
End If
Next
If Schutz = True Then wksMonat.Protect
Next i
Zeile = Zeile + 2
Loop
End Sub

Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 22:07:27
Nils
hmmm... das mit dem Laufindex will ich jetzt irgendwie garnicht verstehen!
warum die 12 ?! wozu?! ich meine ich habe jetzt 24 Blätter plus das datenblatt, ich habe 11 feiertage,... hmmm... und wenn er jetzt mit dem Laufindex die Datenblätter A-01 bis A-12 durchläuft, woher weiß er denn, welche das sind? weil die ja jetzt durchmischt sind. die reihenfolge ist ja A-01, Z-01, A-02, Z-02, A-03, ... usw...
hmmm...
aber es funktionniert jetzt alles, excel ist schon ein tolles programm ;)
danke
AW: Feiertage mit VBA hervorheben
14.11.2006 14:18:08
Nils
Hallo Franz,
die Datenblätter Z-01 bis Z-12 sind zur eingabe der möglichen Arbeitstage und ihrer Dauer gedacht. Es erfolgt noch (in Zukunft von mir) eine weitere Lohnberechnung. Die Blätter A-01 bis A-12 sind ausschließlich zum Ausdrucken gedacht, an ihnen soll der Anwender später nix verändern können / dürfen.
Nun zum Problem:
Betrifft Arbeitsblätter Z-01 bis Z-12:
Macht der Anwender in einer Zelle D5:29 und H5:29 ein Kreuz "x" wird dies automatisch in den vorgefertigten Ausdruck (entweder Frühschicht oder Spätschicht) an entsprechender Stelle übernommen. D.h. die Zellen in den Arbeitsblättern A-01 bis A-12 müssten entsprechend verknüpft werden, damit das auch geschieht.logisch.
Das Problem ist jetzt aber, dass das Makro diese Verknüpfungen löscht, wenn es das Wort "Feiertag" in die entsprechenden Zellen schreibt. Was ja auch eigentlich völlig korrekt ist, weil die Verknüpfung auch gelöscht werden sollte. Berechnet man jetzt aber die Feiertagsdaten für ein anderes Jahr, und lässt die Feiertage erneut berechnen und markieren, dann werden ja wieder zuerst die vorhandenen alten Einträge gelöscht, um dann im nächsten Schritt die neuen Feiertage zu markieren. Bei den alten Feiertagen ist jetzt aber nun die Verknüpfung immer noch weg, obwohl sie keine Feiertage mehr sind.
Das Makro müsste also so verändert werden, dass diese Verknüpfung bei allen Arbeitstagen erhalten bleibt. Auch wenn ein jetziger Arbeitstag mal ein Feiertag war.
Das wäre ein Problem, das andere ist denke ich nicht besonders aufwendig:
Die Zellen mit den Feiertagen müssten auch in den Blättern Z-01 bis Z-12 mit der Farbe "15" (hellgrau) hinterlegt werden. Nur eine Zellenhinterlegung, weiter nix.
Hier ist das aktuelle Dokument:
https://www.herber.de/bbs/user/38148.xls
Ich danke dir sehr Franz,
liebe grüße
Nils
Anzeige
AW: Feiertage mit VBA hervorheben
14.11.2006 16:35:48
fcs
Hallo Nils,
hab das Makro jetzt nochmals angepasst. Sollte jetzt alle gewünschten Funktionen haben.
Für die Formel zur Übernahme der x-Einträge aus den Z-Blättern in die A-Blätter habe ich eine "jahresfeste" SVERWEIS-Formel eingefügt.
Diese Formeln hab ich mit einem Extra-Makro in allen 12-Blätern generiert.
Das Feiertagsmakro stellt diese Formel auch wieder her wenn es einen Feiertag des Vorjahres löscht.
Wegen der Dateigröße nach dem Einfügen aller Formeln Datei als ZIP-Datei
https://www.herber.de/bbs/user/38157.zip
Gruß
Franz
Anzeige
AW: Feiertage mit VBA hervorheben
14.11.2006 20:53:15
Nils
Ohhh man,
das ist ja echt wahnsinn!
Wo hast du das alles gelernt, wenn ich mal fragen darf? Brauchst du lange für sowas?
Ich sitz hier teilweise stundenlang um ein (für dich wahrscheinlich leichtes) Problem zu lösen.
Das mit dem SVERWEIS hab ich noch nicht so richtig verstanden, ich kannte die Arbeitsblattfunktion bis heute noch nicht. Bei Excel lernt man irgendwie nie aus...
Ich werd mir mal demnächst ein Buch über VBA für Anfänger kaufen, sowas will ich auch können :)
Danke Franz!
Echt super Leistung!
Ist mir schon voll unangenehm ;)
Liebe Grüße
Nils
Anzeige
AW: Feiertage mit VBA hervorheben
12.11.2006 16:28:09
Nils
Supper sache!
Vielen dank!
Diese lösung funktionniert einwandfrei!
danke danke danke :)
AW: Feiertage mit VBA hervorheben
13.11.2006 18:14:41
Peter
Hallo Nils,
dann test einmal die beigefügte, geänderte Version:
https://www.herber.de/bbs/user/38119.xls
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Feiertage mit VBA hervorheben
12.11.2006 13:11:23
Nils
achso, eins habe ich vergessen. Auf dem Arbeitsblatt "Daten" werden ebenfalls fälschlicher weise feiertage markiert... fehler?!

34 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige