Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Kalender erstellen per vba Excel 2021 oder 365
#1
Hallo,

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.

Danke für Euere hilfe.
Antworten Top
#2
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:
  • Klaus-Dieter
Antworten Top
#3
Moin Debus,

wenn du das dann erstellt hast, könnte das dann so aussehen, ohne VBA.

Gruß
Roger


Angehängte Dateien Thumbnail(s)
           
Antworten Top
#4
Schau mal:


Angehängte Dateien
.xlsm   Planung_DerH_snb_001.xlsm (Größe: 87,88 KB / Downloads: 7)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
(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.

Vielleicht hast Du ja noch was anderes.

Danke
Antworten Top
#6
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


'Löschen vorhanden Tabellen
Application.DisplayAlerts = False

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


End Sub
Antworten Top
#7
Hallöchen,

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)
Antworten Top
#8
Hey, geht das dann durch alle Tabellenblätter automatisch oder muss ich die alle einzeln ansprechen 

Hast du den vba Code für einen Wert da?

Danke
Antworten Top
#9
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.

Ciao, Ralf

Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste