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, 14:37 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 14: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, 19:18 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 19:23 von Debus.)
(05.04.2022, 14: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, 20:51 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2022, 20: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, 08:23 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2022, 08: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.