Über Userform Kalender(wochenenden) überspringen

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Irithyll.

    Über Userform Kalender(wochenenden) überspringen

    Guten tag,
    ist es möglich in einen dynamischen Kalender per Userform (siehe dateianhang) die Wochenenden zuüberspringen?

    danke im vorraus
    LG

    PS: wie auf dem Bild erkennbar ist, ist der untere abschnitt so wie ich es benötige.
    Bilder
    • u.png

      84,01 kB, 1.920×1.080, 147 mal angesehen
    Ich weiß zwar nicht genau, wie dein bisheriger Code aussieht bzw. was dieser umsetzt, allerdings kann ich dir eine Möglichkeit nennen, die mir vorschwebt, wenn eine gewisse Voraussetzung erfüllt ist.

    Wir gehen davon aus, dass du dein aktuell ausgewähltes Feld mit bspw. U befüllst, wie in deinem Bild. Automatisch soll er das nächste Feld wählen.
    Hierbei wird noch zuvor geprüft, ob dann der Wochentag (feste Zeile, variierende Spalte) der aktuellen Zelle Fr ist - falls ja, soll er 3 Felder weiterspringen, ansonsten nur 1 Feld.
    Wichtig ist auch, ob das neu gewählte Feld überhaupt einen Wochentag besitzt bzw. Teil des Kalenders ist - ggf. muss er ja dann auf die nächste Zeile springen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Per Klick auf einen Button fügst du in die aktuelle Zelle ein U ein und möchtest, dass - wenn du nochmal darauf klickst - dann das U in den nächsten Tag eingetragen wird. Dabei sollen Wochenendtage übersprungen werden - richtig?

    Falls dem so ist, dann müsstest du prüfen, ob die aktuelle Zelle dem Wochentag Freitag entspricht.
    Für die Wochentage hast du oben ja Mo, Di, Mi, Do, Fr, Sa, So - diese stehen in einer bestimmten, festen Zeile.

    Du prüfst also, ob der Wochentag der aktuellen Zelle Freitag entspricht oder nicht. Falls es Freitag ist, dann wählst du ja eben nicht direkt die nächste Zelle aus (das wäre ja Samstag), auch nicht die übernächste, sondern die darauffolgende. Du springst also 3 Zellen weiter.
    In den Fällen Montag bis Donnerstag brauchst du ja nur eine Zelle weiter gehen, da die darauffolgenden Wochentage ja akzeptiert werden.

    Du musst nur darauf achten, dass - so wie es bei vielen Kalendern der Fall ist - du nicht dauerhaft Zellen weiter nach rechts gehen kannst, denn ein Kalender springt ja auch mal auf eine nächste Zeile.

    Ich werde, insofern ich Zeit dafür finde, dir ein Beispiel dessen schreiben. Vielleicht habe ich es ja verständlicher ausgedrückt dieses Mal...
    Ich bin jetzt kurz dazu gekommen einfach mal etwas fix zusammenzuklöppeln.



    Ich gehe bei dieser, wenn auch sehr grob geschriebenen, Variante davon aus, dass alle Monatstage hintereinanderstehen.
    Also gibt es keine neue Zeile wie bei einem standardmäßigen 1-/3-Monats-Kalender (alle Wochentage stehen untereinander).

    Es gibt neben der Darstellung des Monats noch weitere Aspekte, die den Programmablauf entsprechend ändern.
    • wie ist die Anordnung der Tage?
      • in deinem Fall scheinen alle Monatstage jeweils in einer Reihe zu stehen
    • möchte ich, sollte ich ans Monatsende gelangen, auf die nächste Zeile zurück zum ersten Montag des Monats springen?
      • leider weiß ich nicht, welche anderen Daten du ggf. in einer linken Spalte
        (noch vor Anfang des ersten Monatstages) zu stehen hast (z. B. Uhrzeit o. Ä.)
    • brauche ich die Angabe eines Zeitraums, um von Datum X bis Datum Y automatisch Einträge vornehmen zu lassen?
    Weiteres fällt mir dazu gerade nicht ein - gut wäre es zu wissen, worum es sich bei deinem Vorhaben eigentlich handelt (ein wenig ist zwar anhand der dortigen Begriffe bereits zu interpretieren, allerdings ist Gewissheit hier doch hilfreicher als Herumrätseln).



    So sieht mein Excelsheet aus:





    Eine kleine UserForm habe ich mir auch gebastelt:





    Hier der Code, der UserForm:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub CommandButton1_Click()
    3. Dim actCell As Range
    4. Set actCell = ActiveCell
    5. ' actCell = aktive (ausgewählte) Zelle
    6. actCell = ListBox1
    7. ' gewählter Wert der ListBox wird in die aktive Zelle eingetragen
    8. If Cells(1, actCell.Column) = "Fr" Then
    9. ' falls der Tag (steht in meinem Fall in Zeile 1) der aktiven Zelle gleich Fr(eitag) ist und ...
    10. If Application.Intersect(Cells(actCell.Row, actCell.Column + 3), ActiveSheet.UsedRange) Is Nothing Then
    11. ' falls die Zelle 3 Zellen weiter rechts (ausgehend von der aktiven Zelle) sich nicht mit dem benutzten Bereich (UsedRange) des aktiven Sheets überschneidet ...
    12. ' (also die Rückgabe Nothing ist)
    13. MsgBox "Bereits am Monatsende angelangt!"
    14. ' Anzeige einer MessageBox
    15. Else
    16. Cells(actCell.Row, actCell.Column + 3).Select
    17. ' ansonsten Auswahl der nächsten Zelle (! Spalte + 3)
    18. End If
    19. Else
    20. If Application.Intersect(Cells(actCell.Row, actCell.Column + 1), ActiveSheet.UsedRange) Is Nothing Then
    21. MsgBox "Bereits am Monatsende angelangt!"
    22. Else
    23. Cells(actCell.Row, actCell.Column + 1).Select
    24. ' Auswahl der nächsten Zelle (! Spalte + 1)
    25. End If
    26. End If
    27. End Sub
    28. '-----------------------------------------
    29. Private Sub UserForm_Initialize()
    30. ListBox1.Clear
    31. ListBox1.AddItem ("U")
    32. ListBox1.AddItem ("GU")
    33. ' ListBox zuerst leeren & dann befüllen
    34. End Sub