Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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
Inhaltsverzeichnis

Jahresplan auf Monatsplan runterbrechen

Jahresplan auf Monatsplan runterbrechen
11.01.2022 14:59:57
Bernd
Ich bin begeistert über die Hilfe die ich hier bekomme und hoffe das ich euch nicht damit nerve, da ich noch ein na ja großes Problem habe
Ich hab ein Jahresplan im Reiter "Dienst"
dieser soll nun aufgesplittet werden auf die Monate
Mein versuch das über eine Transponierung laufen zu lassen ist schief gelaufen
an den Reitern von "Dienst" und den jeweiligen Monat kann leider nichts geändert werden.
Die Monate werden wieder von einer anderen Tabelle zur Auswertung abgefragt. Aus diesem Grund kann ich dort nichts änderen.
Habt Ihr ein Vorschlag ?
Für die Datumsberechnung des jeweiligen Monats habe ich das hier verwendet
jedoch hab ich hier ein Fehler und finde diesen nicht
jedoch funktioniert sie auf Arbeit.

Sub wrapper_make_time()
Call make_time(Sheets("Start").Range("F4").Text)
End Sub

Sub make_time(year As String)
Dim month, bebefore, before, curr_date, week_day As String
Dim curr As Range
Dim Feiertagsprüfung As Date
ActiveSheet.Unprotect
month = ActiveSheet.Range("I8").Text
curr_date = Format("01." & month & "." & year, "dd.mm.yyyy")
For i = 18 To 59
bebefor = ActiveSheet.Cells(i - 2, 2).Text
befor = ActiveSheet.Cells(i - 1, 2).Text
Set curr = ActiveSheet.Cells(i, 2)
week_day = ActiveSheet.Cells(i, 3).Text
If Len(before) > 1 And Len(week_day) > 1 Then
curr_date = Int(before) + 1 & Right(curr_date, 8)
If test_end_date(curr_date) Then
Exit Sub
End If
curr = Format(curr_date, "dd")
ElseIf Len(bebefore) > 1 And Len(week_day) > 1 Then
curr_date = Int(bebefore) + 1 & Right(curr_date, 8)
If test_end_date(curr_date) Then
Exit Sub
End If
curr = Format(curr_date, "dd")
ElseIf week_day = Format(curr_date, "ddd") Then
curr = Format(curr_date, "dd")
End If
'Feiertagsprüfung = curr_date
'If WorksheetFunktion.CountIf(Sheets("Feiertage").Range("C:C"), Feiertagsprüfung) > 0 Then
'    With ActiveSheet.Cells(i, 2).Font
'        .Color = -16763905
'        .TintAndShade = 0
'    End With
'End If
Next i
End Sub

Function test_end_date(ByVal curr_date As String) As Integer
Dim my_test As Date
Dim res As Integer
res = 0
On Error GoTo err_month:
my_test = Format(curr_date, "dd.mm.yyyy")
If Day(my_test) > Day(Application.WorksheetFunktion.EoMonth(my_test, 0)) Then
res = 1
End If
test_end_date = res
Exit Function
err_month:
test_end_date = 1
End Function
https://www.herber.de/bbs/user/150329.xlsm

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jahresplan auf Monatsplan runterbrechen
11.01.2022 18:13:56
Bernd
Hallo Yal
Danke für deinen Beitrag, denn hatte ich wirklich übersehen.
Ich hab mich gleich ran gemacht und eingearbeitet.
Jedoch habe ich das Problem, dass ich mein Muster_Blatt in der Anordnung nicht verändern darf.
Hast du noch einen anderen Lösungsvorschlag.
Wie gesagt auf Arbeit läuft es ja bei mir. Vieleicht hab ich ja ein Komma falsch gesetzt oder + mit minus verwechselt oder so.
Anzeige
AW: Jahresplan auf Monatsplan runterbrechen
11.01.2022 18:50:38
Yal
Hallo Bernd,
mein Fehler. Es funktioniert doch mit der gegebenen Vorlage.
Grenzfall ist z.B. Mai 2022. Dann fällt ein Feld für die Summe der Tage 30.5. und 31.5. Aber so ist die Vorlage.
Dann muss das Ausblenden angepasst werden. Hier der ganze, angepasste Code. Änderung kommen nur im unteren Select Case

Sub AlleMonate_erstellen()
Dim i As Integer
Dim Monat As String
Dim Jahr As Integer
'Jahr lesen und prüfen
Jahr = CInt(Sheets("Start").Range("S1").Value)
If Jahr  2100 Then
MsgBox "Gegebenes Jahr """ & Jahr & """ ist nicht tragbar.", vbExclamation, "Tschüss"
Exit Sub
End If
'für alle Monate
For i = 1 To 12
Monat = Format(DateSerial(Jahr, i, 1), "MMMM") 'erste Buchstabe gross
Sheets("Muster_blatt").Copy after:=Sheets(Sheets.Count) 'Kopie vom Muster
Sheets(Sheets.Count).Name = Monat 'Name vergeben
Worksheets(Monat).Range("H8") = Monat 'Name reinschreiben
Monat_setzen Jahr, Monat 'Monat setzen
Next
End Sub
Private Sub Monat_setzen(ByVal Jahr As Integer, ByVal Monat As String)
Dim Zeile As Integer
Dim aktTag As Date
aktTag = DateValue("1. " & Monat & " " & Jahr)
With Worksheets(Monat)
Zeile = 17 + Weekday(aktTag, vbMonday) 'Startzeile ermitteln
If Zeile > 18 Then .Rows("18:" & Zeile - 1).Hidden = True 'unnötige Zeilen am Anfang ausblenden
Do
.Cells(Zeile, 2) = Day(aktTag) 'Tagesnummer setzen
.Cells(Zeile, 1) = Worksheets("Dienst").Cells(month(aktTag) * 9 - 4, Day(aktTag) + 2).Value 'Dienst für den Tag abholen
Zeile = Zeile + 1 - CInt(Weekday(aktTag) = vbSunday) 'Zeile + 1, bei Sonntag + 2
aktTag = aktTag + 1 'Tag +1
Loop While Format(aktTag, "MMMM") = Monat 'Weiter solang aktTag noch im selbe Monat
Select Case Zeile
Case Is 
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige