ich möchte gerne per vba einen Dienstplan für ein Jahr wie folgt erstellen.
Pro Monat soll ein Datenblatt erstellt werden. Die Tage sollen horizontal angeordnet sein und es soll der Tag in Wort und das Datum erscheinen. Ferien NRW sollen farblich gekennzeichnet sein und ebenso nur in einer anderen Farbe die Wochenenden.
Es sollen dann am Ende also 12 Datenblätter mit den Monaten erscheinen. Das Jahr soll wenn möglich flexible durch eine Inputbox vorgegeben werden.
05.04.2022, 15:37 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 15:37 von Ralf A.)
Hi,
mal abgesehen von den Tatsachen, dass es für diese Aufgabenstellung kein VBA braucht, die Struktur ungünstig ist und diese Aufgabenstellung an und für sich selbst für einen Anfänger leicht zu bewerkstelligen sein sollte, möchtest Du, dass wir Dir noch einen Kuchen dazu backen?
Wenn es Dir aber darum geht, zu lernen wie man wann, warum, welche Schleife verwendet, dann schau mal hier
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:1 Nutzer sagt Danke an Ralf A für diesen Beitrag 28 • Klaus-Dieter
05.04.2022, 20:18 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 20:23 von Debus.)
(05.04.2022, 15:37)Ralf A schrieb: Hi,
mal abgesehen von den Tatsachen, dass es für diese Aufgabenstellung kein VBA braucht, die Struktur ungünstig ist und diese Aufgabenstellung an und für sich selbst für einen Anfänger leicht zu bewerkstelligen sein sollte, möchtest Du, dass wir Dir noch einen Kuchen dazu backen?
Wenn es Dir aber darum geht, zu lernen wie man wann, warum, welche Schleife verwendet, dann schau mal hier
Also Ralf, Du brauchst mir keinen Kuchen für mich backen, und ich wollte auch nur mal die ersten Hilfestellungen haben, also wie mache ich das, das ich per VBA einen Monat horizontal abbilden kann. Das einfach zu gestalten ist kein Problem(ohne VBA), aber ich will es automatisch haben, damit es jeder erstellen kann, der nun gar nichts mit Excel etc. zu tun hat. Danach würde ich das dann versuchen weiter zu automatisieren, also ein weiteres Tabellenblatt einfügen und dann den nächsten Monat ausfüllen...... Mir fehlt das halt mit dem Monat, auch das es dann einmal bei 30 und dann bei 31 Tagen (28,29 Tagen im Februar) aufhört. Mir fehlt erstmal das als das wichtigste. Dei Formatierungen und so würde ich glaube ich dann schon hinbekommen. Also keinen Kuchen aber vielleicht ein Teilchen womit ich dann anfangen kann.
Danke Hallo SNB,
leider habe ich mich vertan und meine Vertikal, sorry, aber den vba Ansatz habe ich bei Dir in der Datei trotzdem nicht gefunden.
05.04.2022, 21:51 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 21:51 von Debus.)
Hey, ich habe mal angefangen zu backen :=)))
Nun würde ich noch die Ferien farblich kennzeichnen hat da jemand schon mal ein Teilchen für mich?
Geht natürlich mit der bedingten Formatierung aber wie lasse ich die per vba laufen, weil ich da ja jedes Tabellenblatt einzeln ansprechen muss. Denn dann würde ich natürlich auch noch die Feiertage kennzeichnen wollen ;)
Danke
Code:
Option Explicit Sub Kalender() Dim blatt As Worksheet Dim monat As Integer Dim anzTage As Integer Dim jahr As Integer Dim tagNr As Integer Dim aktuellerTag As Date
For Each blatt In Worksheets If Not blatt Is ActiveSheet Then blatt.Delete End If Next Application.DisplayAlerts = True jahr = InputBox("Für welches Jahr soll der Plan angelegt werden?", "", "2022")
For monat = 1 To 12 anzTage = Day(DateSerial(jahr, (monat + 1) Mod 12, 0)) Worksheets(monat).Name = MonthName(monat) & " " & jahr For tagNr = 1 To anzTage aktuellerTag = DateSerial(jahr, monat, tagNr) Worksheets(monat).Cells(tagNr, 1).Value = aktuellerTag
If Weekday(aktuellerTag) = vbSaturday Or Weekday(aktuellerTag) = vbSunday Then
Worksheets(monat).Cells(tagNr, 1).Interior.Color = vbRed End If Range("A1:A33").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy" Next tagNr
If monat < 12 Then Worksheets.Add after:=Worksheets(Worksheets.Count) End If Next monat
Du brauchst dazu nur in einer schleife das Datum mit den verschiedenen Ferien oder Feiertagen abzuprüfen. Bei den Feiertagen kannst Du das Datum auch ohne Schleife mit ZÄHLENWENN abgleichen, gibts auch in VBA (WORKSHEETFUNCTION.COUNTIF...)
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
06.04.2022, 09:23 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2022, 09:24 von Ralf A.)
Zitat:Hey, geht das dann durch alle Tabellenblätter automatisch oder muss ich die alle einzeln ansprechen
Du gehst sie doch sowieso alle durch:
Code:
If monat < 12 Then Worksheets.Add after:=Worksheets(Worksheets.Count) End If
Und jetzt für jede Aufgabe, die Du durchführen willst, erstellst Du Dir eine separate Sub, die Du noch vor dem End If aufrufst. Das neu hinzugefügte Blatt ist dabei das hinzugefügte Blatt (solange Du nix anderes angibst).
Bsp.: Innerhalb der If Anweisung, nach Worksheets.Add, könntest Du folgende Ergänzungen vornehmen:
Code:
If monat < 12 Then Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = monat SchreibeTage monat EineWeitereSub '...usw... End If End Sub
'separate Sub Sub SchreibeTage(monat As Byte) Dim t As Byte, dat As Date On Error GoTo Fehler For t = 1 To 31 dat = CDate(t & "." & monat & "." & Year(Date)) If Month(dat) = monat Then 'Damit Du Dich nicht um die korrekte Anzahl der Monatstage (oder Schaltjahrestage) kümmern musst (ansonsten Gauss'sche Osterformel) Cells(t + 1, 1) = dat Cells(t + 1, 2) = Format(dat, "dddd") End If Next t Fehler: Err.Clear End Sub
Sub EineWeitereSub() 'nur als Beispielsub.... Range("A1") = "Datum" Range("B1") = "Wochentag" Range("A1:B1").Font.Bold = True End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.