Moin-Moin.
Ich habe auf dem Tabellenblatt "Kalender" in B1:G367 Daten stehen die ich auf die Monatsblätter (Januar, Februar, ...) aufteilen möchte.
Erstes Problem, wie verteile ich es automatisch in die jeweiligen Monatstabellenblätter und muss ich die Tabellenblätter händisch erstellen oder geht soetwas auch via VBA?
Zweites Problem ist der Februar, da dieser ja nicht immer die gleiche Tageszahl hat.
In B1:B367 (kein Schaltjahr) stehen das Datum vom 01.01.2018 - 31.12.2018, wobei das Jahr dynamisch ist.
Ich habe mir ein dickes VBA gekauft von Bernd Held, aber da brauche ich einige Tage (ppar Wochen, um erst einmal über das große den Überblick zu bekommen.
Hat von Euch jemand eine Lösung oder hatte schon einmal ein solches Problem und kann mir helfen?
Lieben Dank und Moin-Moin.

Runde 2: Daten in Excel aufteilen nach Monaten
-
Alina -
14. Februar 2018 um 14:43 -
Erledigt
-
-
- Offizieller Beitrag
Du musst nix händisch erstellen. Was du dynamisch kontrollieren willst, packst du in eine Routine, die beim Öffnen des Workbooks ausgeführt wird (Workbook-Open Event).
Dann prüfst du, was ist das letzte vorhandene Tabellenblatt (Monat), wieviel sollen sichtbar sein (z.B. -3/aktuell/+3) und entfernts/fügst Tabellenblätter hinzu, deren Inhalt du nach vorgefertigten Abläufen befüllst.
Du musst für dich entscheiden, was du eventuell beim Entfernen von Tabellenblättern an Daten in ein Log schreibst, als Rückschaumöglichkeit. Denn ich nehme mal an, das soll nicht für x Jahre alle Daten beinhalten.
-
Hallo Alina, das ist kein Problem und in Vba leicht zu erstellen. Je nach Wissenstand, versuche es in einzelne Schritte aufzuteilen und diese mit dem Makorrecorder in Excel aufzuzeichen. Anschließend kannst Du den Code händisch zusammenbauen. Oder stelle hier ein Beispielmappe rein.
Stefan
-
Moin BugFix & Schleifchen.
Also ich belese mich gerade erst mit VBA und wie einige ja wissen, ich meine Zeit 24 Tag schon viel zu kurz. Aber ich glaube das könnte ich irgendwie verstehen.
Ich hänge eine Datei ran. Es die die Datei, so wie ich sie selber zugesendet bekomme habe. Ich habe dann schon mal die Sonntage, Feiertage farblich bedingt formatiert und die Feiertage, die nicht auf einen Sonntag fallen. Dieses ist später nämlich wichtig zu den Berechnungen, die dann in die Folgespalten H bis U entstehen werden.
Die Daten sollen nun in Monate ausgeteilt werden und von der Logik kann ich BugFix etwas folgen. Aber ich möchte später nur im Kalender tagesaktuelle Daten eingeben, um auf den Monatsblättern dann einen besseren Übersicht zu bekommen und nur monatsspezielle Berechnungen nur noch in die Tabellenblätter einfügen. Aber hier werde ich dann auch Vorlagen machen und die dann in die Tabellen kopieren, wenn es mit den Monaten funktioniert.
Sollte dann ja das gleiche Prizip sein, nur das die Tabellenblätter Januar bis Dezember dann ja bereits erstellt ist. Das wollte ich auch mit VBA mal sehen ob das geht. Wenn ich das richtig bis jetzt gelesen habe, ist es möglich zu sagen, das wenn in Spalte B3:B368 der Monats ein Januar ist, dann kopiere es, in meinem Fall in das Tabellenblatt "Januar". So würde es auch beachtet werden, wenn es sich um ein Schaltjahr handelt. Habe gerade noch in B368 das Feld mit einer Formel hinterlegt, damit es beim Schaltjahr den 31. Dezember auch anzeigt und nicht den 01. des Folgejahres.
Alles unwichtige habe ich mal aus dem Kalender genommen. Wird dann meine Beispiel-Datei für den Ordner: "Grundlagen".
Wenn der dynamische Kalender fertig ist, nimmt der mir sehr sehr viel Berechnungen ab, die immer und immer wieder die gleichen sind. Und genau dafürist Excel ja da. Noch immer steht bei uns auf den Schreibtischen Taschenrechner, außer auf meinem, da läuft der fast immer auf einen der Monitore. Aber ich brauche Zeitersparnis und dieser Kalender, so er denn fertig ist spart mir wöchentlich dann ca. 2-3 Stunden und am Nonatsanfang gut 6 Stunden. Zeit, die ich mir dann nämlich an Überstunden sparen kann. Das Konto ist eh schon wieder überfüllt (Maximum + 72% Stand gestern).
So, es ist schon wieder mitten in der Nacht. Ich versuche noch mal eineinhalb Stunden zu schlafen. Euch einen schönen Donnerstag und hoffentlich bald mal einen richtigen Winter.Download / Anhang: DynKan.rar
-
Erstes Problem, wie verteile ich es automatisch in die jeweiligen Monatstabellenblätter und muss ich die Tabellenblätter händisch erstellen oder geht soetwas auch via VBA?
Beim ersten Start soll das ganze Jahr abgearbeitet werden? Wenn das erfolgt ist werden täglich nur noch die Änderungen in die bereits vorhandenen Tabellenblätter ergänzt? Ist das Richtig so?
Wie soll es mehrjährig gehändelt werden, stehen Januar 2019 und Januar 2020 auf einem Tabellenblatt?
Stefan
-
Code
Alles anzeigenOption Explicit Sub Daten_kopieren() Dim wksKalender As Worksheet Dim wksMonat As Worksheet Dim boli As Boolean Dim intJahr As Integer Dim bolSchaltjahr As Boolean Dim varKopierBereich Dim bytMonat As Byte Dim strMonatName As String Dim intEinfuegeEnde As Integer Set wksKalender = ThisWorkbook.Sheets(1) intJahr = wksKalender.Cells(1, 2) 'prüft Schaltjahr: bolSchaltjahr = Day(DateSerial(intJahr, 2, 29)) = 29 'prüfen ob Monatsblatt vorhanden ist und neu anlegen, zu kopierenden Bereich definieren: For bytMonat = 1 To 12 Select Case bytMonat Case 1 strMonatName = "Januar" varKopierBereich = wksKalender.Range("B3:G" & 33) Case 2 strMonatName = "Februar" varKopierBereich = wksKalender.Range("B34:G" & 61 + bolSchaltjahr) Case 3 strMonatName = "März" varKopierBereich = wksKalender.Range("B62:G" & 92 + bolSchaltjahr) Case 4 strMonatName = "April" varKopierBereich = wksKalender.Range("B93:G" & 122 + bolSchaltjahr) Case 5 strMonatName = "Mai" varKopierBereich = wksKalender.Range("B123:G" & 153 + bolSchaltjahr) Case 6 strMonatName = "Juni" varKopierBereich = wksKalender.Range("B154:G" & 183 + bolSchaltjahr) Case 7 strMonatName = "Juli" varKopierBereich = wksKalender.Range("B184:G" & 214 + bolSchaltjahr) Case 8 strMonatName = "August" varKopierBereich = wksKalender.Range("B215:G" & 245 + bolSchaltjahr) Case 9 strMonatName = "September" varKopierBereich = wksKalender.Range("B246:G" & 275 + bolSchaltjahr) Case 10 strMonatName = "Oktober" varKopierBereich = wksKalender.Range("B276:G" & 306 + bolSchaltjahr) Case 11 strMonatName = "November" varKopierBereich = wksKalender.Range("B307:G" & 336 + bolSchaltjahr) Case 12 strMonatName = "Dezember" varKopierBereich = wksKalender.Range("B337:G" & 367 + bolSchaltjahr) End Select ' Stop boli = False For Each wksMonat In ThisWorkbook.Worksheets If wksMonat.Name = strMonatName Then boli = True End If Next If boli = False Then Sheets.Add after:=Sheets(bytMonat + 1) Worksheets(bytMonat + 2).Name = strMonatName MsgBox ("Das Tabellenblatt " & strMonatName & " wurde erstellt") 'kann gelöscht werden End If 'kopieren der monatlichen Daten nach Monatsblatt intEinfuegeEnde = Day(DateSerial(intJahr, bytMonat + 1, 0)) Worksheets(strMonatName).Range("B1:G" & intEinfuegeEnde) = varKopierBereich Worksheets(strMonatName).Activate MsgBox ("Die Daten wurden in das Tabellenblatt " & strMonatName & " kopiert") 'kann gelöscht werden Next bytMonat MsgBox ("Kopiervorgang ist komplett") 'kann gelöscht werden End Sub
Hallochen, in der Arbeitsmappe mit Alt+F11 den Editor öffen
- ein neues Modul einfügen
- obigen Code einfügen
- die Arbeitsmappe als *.xlsm speichern
- den Cursor in Code setzen und mit F8 Schritt für Schritt ausführen.
Dann kannst du schön nachvollziehen wie der Code abgearbeitet wird.
Wie soll der nächste Schritt sein?
-
Moin Schleifchen.
Erst einmal: MEIN DANK !!!
Frage:Beim ersten Start soll das ganze Jahr abgearbeitet werden? Wenn das erfolgt ist werden täglich nur noch die Änderungen in die bereits vorhandenen Tabellenblätter ergänzt? Ist das Richtig so?Antwort: dieses ist richtig so.
Frage:
Wie soll es mehrjährig gehändelt werden, stehen Januar 2019 und Januar 2020 auf einem Tabellenblatt?
Antwort: Ich habe die Lösung in den VBA Code so geändert und hoffe das es so richtig ist und Du nichts da gegen hast:
Case 1
strMonatName = "Januar" & " " & intJahr
varKopierBereich = wksKalender.Range("B3:G" & 33)
Deinen Dateianhang konnte ich leider nicht öffnen, aber ich habe es mit C&P eingefügt bekommen.
Ich habe bei "'kopieren der monatlichen Daten nach Monatsblatt" die Position, wo die Daten hinkopiert werden sollen geändert. Dies ergibt sich aus dem 2. Schritt der wie folgt aussieht:
Ich habe das Tabellenblatt Monatsvorlage mal erstellt. Auf dem sind drei farbige Felder. In den kommen später Formel. Diese Felder sollen auf jedes erstellte Monatsblatt kopiert werden, das zu dem intjahr gehört. Das ist wichtig, wenn später mehrer Jahre in der Exceltdatei sind, da zum JahresbeginnÄnderungen dann nur in der Vorlage zu machen sind.
-
Na dann ist ja alles fast perfekt!
Diese Felder sollen auf jedes erstellte Monatsblatt kopiert werden, das zu dem intjahr gehört.
da stehe ich bisschen auf dem Schlauf
Wenn ich Dir noch helfen soll, dann mach bitte eine fertige Beispieldatei zurecht. Ansonsten lassen sich die Formeln auch per Vba definieren:
-
Hallo.
1.)
Habe gerade festgestellt, das das VBA an Schaltjahren nicht richtig arbeitet.
2.)
Ich wollte folgende Zeile wie folgt ändern:
Alt: Worksheets(strMonatName).Range("B1:G" & intEinfuegeEnde) = varKopierBereich
Neu: Worksheets(strMonatName).Range("B7:G" & intEinfuegeEnde) = varKopierBereich
Aber das geht nicht, da er dann nicht alle Tage es Monats kopier. Wo denke ich da falsch?
Das zweite Problem machen wir später. Okay? -
Habe gerade festgestellt, das das VBA an Schaltjahren nicht richtig arbeitet.
Ja, da habe ich nicht richtig nachgedacht. Wenn der Februar einen Tag länger ist müssen in den Folgemonaten der Anfang UND Ende um jeweils einen Tag verlängert werden.
Ich werde es mal in ein Array pressen, nur leider nicht heut
Mit obigem Code wird dem Zellbereich die Variable zugewiesen. Beide Bereich müssen die gleich Größe haben. Ergo sollte das dann funktionieren:
Es gibt noch ne andere Funktion welche den Zielbereich automatisch anpasst, komm aber grad nicht drauf...
Gruß
Stefan
-
Moin Stefan.
Aktuelle Datei in der Anlage.
Außer dem Schaltjahrproblem bin ich gut vor.
Das mit dem kopieren von anderen Bereichen bekomme ich auch schon hin. Habe eine Testdatei und probiere viel aus.
Beim "Formeln auch per Vba definieren", sagt mein Kopf: "Ja, sieht logisch aus", aber die Umsetzung, da komme ich bestimmt auf Dich zurück.
Bei der beigefügten Datei habe ich drei Buttons. Eines das die jeweiligen Kalenderblätter (Janauar - Dezember) erstellt und dann einen um die Kalenderblätter aus 2018 zu löschen und einen um die Kalenderblätter aus 2020 (Schaltjahr zu löschen. Das habe ich nur gemacht, weil ich dazu händisch keine Lust habe. Die sind später dann nicht mehr da.
So, bin mal gespannt wie das Schaltjahrproblem zu löschen ist. Ich habe mir das VBA von Dir ausgedruckt und werde jetzt mit einem Cappuccino auf dem Sofa mir das mal, unter zuhilfenahme des Buches "VBA mit Excel" von Bernd Held, in den Kopf "drücken".
Und Montag wird Beleg ausgefüllt, denn die € 49,90 sind schließlich "beruflich notwendige Bildungskosten" und die trägt mal brav mein Arbeitgeber, womit er noch nie Probleme hatte.
Stand: 2018/02/17 ewiger_kalender_0_0_3.rar -
Hallo Alina,
mir ist klar der folgende Vorschlag ist (möglicherweise) extrem trivial. Schreib die Schaltjahre in ein Ini File und frag vor Beginn ab, ob Schaltjahr oder nicht. Oder bring die Schaltjahre in dem Blatt für die Feiertage unter. Einfach eintippen Soviele Zahlen sind das nicht - für die nächsten 80 Jahre
- wenn Exel die nicht richtig berechnen kann. Den Februar grundsätzlich um einen Tag länger anlegen, und eben nur in Schaltjahren ein Datum einbauen frei nach dem Motto If Schaltjahr = true then.... .
Durch den Grundsätzlich längeren Februar musst Du das Design nicht durcheinander werfen.
Vielleicht hilft Dir der Ansatz
LG
Peter
-
Hallo Alina, so funzt der Code:-):
Code
Alles anzeigenOption Explicit Sub Daten_kopieren() Dim wksKalender As Worksheet Dim wksMonat As Worksheet Dim boli As Boolean Dim intJahr As Integer Dim bolSchaltjahr As Boolean Dim varKopierBereich Dim bytMonat As Byte Dim strMonatName As String Dim intEinfuegeEnde As Integer Dim arintZellen(1, 11) Set wksKalender = ThisWorkbook.Sheets(1) intJahr = wksKalender.Cells(1, 2) 'prüft Schaltjahr: bolSchaltjahr = Day(DateSerial(intJahr, 2, 29)) = 29 'Zuweisung der ArrayFelder: If bolSchaltjahr = False Then arintZellen(0, 0) = 3 arintZellen(1, 0) = 33 arintZellen(0, 1) = 34 arintZellen(1, 1) = 61 arintZellen(0, 2) = 62 arintZellen(1, 2) = 92 arintZellen(0, 3) = 93 arintZellen(1, 3) = 122 arintZellen(0, 4) = 123 arintZellen(1, 4) = 153 arintZellen(0, 5) = 154 arintZellen(1, 5) = 183 arintZellen(0, 6) = 184 arintZellen(1, 6) = 214 arintZellen(0, 7) = 215 arintZellen(1, 7) = 245 arintZellen(0, 8) = 246 arintZellen(1, 8) = 275 arintZellen(0, 9) = 276 arintZellen(1, 9) = 306 arintZellen(0, 10) = 307 arintZellen(1, 10) = 336 arintZellen(0, 11) = 337 arintZellen(1, 11) = 367 Else arintZellen(0, 0) = 3 arintZellen(1, 0) = 33 arintZellen(0, 1) = 34 arintZellen(1, 1) = 62 arintZellen(0, 2) = 63 arintZellen(1, 2) = 93 arintZellen(0, 3) = 94 arintZellen(1, 3) = 123 arintZellen(0, 4) = 124 arintZellen(1, 4) = 154 arintZellen(0, 5) = 155 arintZellen(1, 5) = 184 arintZellen(0, 6) = 185 arintZellen(1, 6) = 215 arintZellen(0, 7) = 216 arintZellen(1, 7) = 246 arintZellen(0, 8) = 247 arintZellen(1, 8) = 276 arintZellen(0, 9) = 277 arintZellen(1, 9) = 307 arintZellen(0, 10) = 308 arintZellen(1, 10) = 337 arintZellen(0, 11) = 338 arintZellen(1, 11) = 368 End If 'prüfen ob Monatsblatt vorhanden ist und neu anlegen, zu kopierenden Bereich definieren: For bytMonat = 1 To 12 Select Case bytMonat Case 1 strMonatName = "Januar" & " " & intJahr Case 2 strMonatName = "Februar" & " " & intJahr Case 3 strMonatName = "März" & " " & intJahr Case 4 strMonatName = "April" & " " & intJahr Case 5 strMonatName = "Mai" & " " & intJahr Case 6 strMonatName = "Juni" & " " & intJahr Case 7 strMonatName = "Juli" & " " & intJahr Case 8 strMonatName = "August" & " " & intJahr Case 9 strMonatName = "September" & " " & intJahr Case 10 strMonatName = "Oktober" & " " & intJahr Case 11 strMonatName = "November" & " " & intJahr Case 12 strMonatName = "Dezember" & " " & intJahr End Select ' Stop boli = False For Each wksMonat In ThisWorkbook.Worksheets If wksMonat.Name = strMonatName Then boli = True End If Next If boli = False Then Sheets.Add after:=Sheets(bytMonat + 1) Worksheets(bytMonat + 2).Name = strMonatName End If 'kopieren der monatlichen Daten nach Monatsblatt wksKalender.Activate varKopierBereich = wksKalender.Range(Cells(arintZellen(0, bytMonat - 1), 2), Cells(arintZellen(1, bytMonat - 1), 7)) Worksheets(strMonatName).Activate intEinfuegeEnde = arintZellen(1, bytMonat - 1) - arintZellen(0, bytMonat - 1) + 6 Worksheets(strMonatName).Range(Cells(7, 2), Cells(intEinfuegeEnde, 7)) = varKopierBereich Next bytMonat MsgBox ("Kopiervorgang ist komplett") 'kann gelöscht werden Sheets("Kalender").Select End Sub
-
Moin Stefan.
Erst einmal herzlichen Dank.
Nachdem ich die Zeilen 19 bis 67 angepasst habe, da sonst bei den Monaten die letzten Tage fehlen, funktioniert es.
Aber auch wenn es funktioniert, werde ich mich mal ran machen und versuchen alles zu verstehen.Code
Alles anzeigenOption Explicit Sub Daten_kopieren() Dim wksKalender As Worksheet Dim wksMonat As Worksheet Dim boli As Boolean Dim intJahr As Integer Dim bolSchaltjahr As Boolean Dim varKopierBereich Dim bytMonat As Byte Dim strMonatName As String Dim intEinfuegeEnde As Integer Dim arintZellen(1, 11) Set wksKalender = ThisWorkbook.Sheets(1) intJahr = wksKalender.Cells(1, 2) 'prüft Schaltjahr: bolSchaltjahr = Day(DateSerial(intJahr, 2, 29)) = 29 'Zuweisung der ArrayFelder: If bolSchaltjahr = False Then arintZellen(0, 0) = 3 ' Jan arintZellen(1, 0) = 34 ' Jan arintZellen(0, 1) = 34 ' Feb arintZellen(1, 1) = 62 ' Feb arintZellen(0, 2) = 62 ' Mär arintZellen(1, 2) = 93 ' Mär arintZellen(0, 3) = 93 ' Apr arintZellen(1, 3) = 123 ' Apr arintZellen(0, 4) = 123 ' Mai arintZellen(1, 4) = 154 ' Mai arintZellen(0, 5) = 154 ' Jun arintZellen(1, 5) = 184 ' Jun arintZellen(0, 6) = 184 ' Jul arintZellen(1, 6) = 215 ' Jul arintZellen(0, 7) = 215 ' Aug arintZellen(1, 7) = 246 ' Aug arintZellen(0, 8) = 246 ' Sep arintZellen(1, 8) = 276 ' Sep arintZellen(0, 9) = 276 ' Okt arintZellen(1, 9) = 307 ' Okt arintZellen(0, 10) = 307 ' Nov arintZellen(1, 10) = 337 ' Nov arintZellen(0, 11) = 337 ' Dez arintZellen(1, 11) = 368 ' Dez Else arintZellen(0, 0) = 3 arintZellen(1, 0) = 34 arintZellen(0, 1) = 34 arintZellen(1, 1) = 63 arintZellen(0, 2) = 63 arintZellen(1, 2) = 94 arintZellen(0, 3) = 94 arintZellen(1, 3) = 124 arintZellen(0, 4) = 124 arintZellen(1, 4) = 155 arintZellen(0, 5) = 155 arintZellen(1, 5) = 185 arintZellen(0, 6) = 185 arintZellen(1, 6) = 216 arintZellen(0, 7) = 216 arintZellen(1, 7) = 247 arintZellen(0, 8) = 247 arintZellen(1, 8) = 277 arintZellen(0, 9) = 277 arintZellen(1, 9) = 308 arintZellen(0, 10) = 308 arintZellen(1, 10) = 338 arintZellen(0, 11) = 338 arintZellen(1, 11) = 369 End If 'prüfen ob Monatsblatt vorhanden ist und neu anlegen, zu kopierenden Bereich definieren: For bytMonat = 1 To 12 Select Case bytMonat Case 1 strMonatName = "Januar" & " " & intJahr Case 2 strMonatName = "Februar" & " " & intJahr Case 3 strMonatName = "März" & " " & intJahr Case 4 strMonatName = "April" & " " & intJahr Case 5 strMonatName = "Mai" & " " & intJahr Case 6 strMonatName = "Juni" & " " & intJahr Case 7 strMonatName = "Juli" & " " & intJahr Case 8 strMonatName = "August" & " " & intJahr Case 9 strMonatName = "September" & " " & intJahr Case 10 strMonatName = "Oktober" & " " & intJahr Case 11 strMonatName = "November" & " " & intJahr Case 12 strMonatName = "Dezember" & " " & intJahr End Select ' Stop boli = False For Each wksMonat In ThisWorkbook.Worksheets If wksMonat.Name = strMonatName Then boli = True End If Next If boli = False Then Sheets.Add after:=Sheets(bytMonat + 1) Worksheets(bytMonat + 2).Name = strMonatName End If 'kopieren der monatlichen Daten nach Monatsblatt wksKalender.Activate varKopierBereich = wksKalender.Range(Cells(arintZellen(0, bytMonat - 1), 2), Cells(arintZellen(1, bytMonat - 1), 7)) Worksheets(strMonatName).Activate intEinfuegeEnde = arintZellen(1, bytMonat - 1) - arintZellen(0, bytMonat - 1) + 6 Worksheets(strMonatName).Range(Cells(7, 2), Cells(intEinfuegeEnde, 7)) = varKopierBereich Next bytMonat 'MsgBox ("Kopiervorgang ist komplett") 'kann gelöscht werden Sheets("Kalender").Select End Sub
Moin Peter.
Die Lösung von Stefan ist das was ich gesucht habe. Dein Vorschlag, wenn ich es richtig verstanden habe ist eine VBA freie Lösung, da man alles über formeln macht. Sehe ich das richtig?
Euch beiden und alles anderen na klar auch einen schönen Abend und ein schönes Wochenende. -
Eigentlich nicht. War sozusagen nur eine Nischenlösung für Dein Schaltjahrproblem. Aber vielleicht habe ich ja auch Dein Problem mit den Schaltjahren falsch verstanden.
LG
Peter
Br.......den ganzen Tag Regen...
-
Br.......den ganzen Tag Regen...
Hier ist das wunderschönste Winterwetter, nur der Schnee fehlt. Eisig kalt, windig und wunderbare Sonnenaufgänge und Sonnenuntergänge mit hellrot leuchtenden Himmel.
-
Nachdem ich die Zeilen 19 bis 67 angepasst habe, da sonst bei den Monaten die letzten Tage fehlen, funktioniert es.
Hallo Alina, tut mir leid...hatte es nicht nochmals geprüft. Aber die Fehler lag nicht in obigen Zeilen, die sind korrekt. Die Ursache war in Zeile 116
ist richtig. Vorher war der Einfügebereich 1 Zeile zu klein. Die letzte Zahl war vorher eine 6.
-
Stefan, das ist jetzt okay. Habe ich so geändert !!!
-
Moin Moin zu Runde 2
Vorab: Meine Beispielexceldatei befindet sich in der Anlage: ewiger_kalender_0_0_7.rar
Es gibt drei Tabellenblätter zu Beginn: "Kalender", "Feiertage" und "Monatsvorlage".
Auf dem Tabellenblatt "Kalender" funktioniert alles einwandfrei, Dank Stefan (Username: Schleifchen).
: Es werden die Monatsblätter erstellt und die erwünschten Daten hinein kopiert. Die beiden Lösch-Button dienen derzeitig nur zum Test.
Auf dem Tabellenblatt "Feiertage ist ebenfalls alles in Ordnung.
Auf dem Tabellenblatt "Monatsvorlage" habe ich gelbe und blaue Bereiche, die auch schon richtig in die dementsprechenden Monatsblätter kopier werden.
Nun zu den aktuellen Problemen:
1.) Wie kann ich in den Zellen B6:B der Monatsblätter das Format so ändern, das der Wochentag mit angezeigt wird?
Evtl. sogar eine Lösung, die "Grundsätzlich" diese Einstellung aus dem Quellbereich übernehmen?
2.) Wie blende ich in den Monatsblättern die Spalten D-F aus?
3.) Wenn der Kopiervorgang abgeschlossen ist, sieht man auf dem Tabellenblatt "Montasvorlage noch, was zum kopieren markiert wurde und auch dort wo es
eingefügt wurde, sind die eingefügten ausgewählt. Wie bekomme ich das weg?
4.) a) Wie kann ich die Spaltenbreite per VBA festlegen?
b) Wie kann ich die Zeilenhöhe per VBA festlegen?
5.) Wie ändere ich die Reihenfolge der Tabellenblätter? "Feiertage" und "Monatsvorlage" sollen ganz nach hinten (re.) , Kalender immer ganz vorne (li.)
Modul 3 habe ich dann doch schon alleine hin bekommen. Ist vielleicht nichts großes, aber ich bin ja mal gerade angefangen mich damit zu Beschäftigen.
Aus diesem Grund dokumentiere ich gerne auch jeden Schritt.
Ich bin dann ja mal gespannt und nachdenklich.
Zu Beitrag Nr. 8 noch kurz:....
da stehe ich bisschen auf dem Schlauf
Und mit Modul-3 ist das Problem gelöst, was ich wohl nicht richtig erklären konnte und Du somit auf dem Schlauch gestanden bist.
Ich habe das erst nur für 2018 erstellt und dann geschaut wie Du die dynamik für das Kalenderjahr geschrieben hast. Das habe ich dann auf Modul 3 umgesetzt und siehe da, es funktioniert. Sicherlich nicht die beste Lösung, aber es ist eine Anfängerinnenlösung.
Dann mal einen schönen Tag noch.
-
Hallo Alina, die Höhe, Breite und Sichtbarkeit kannst Du über die Eigenschaften einstellen:
Code
Alles anzeigenSub ZeileundSpaltenEigenschaften() Dim Zeile Dim Spalte Dim wks As Worksheet Set wks = Worksheets(3) wks.Columns(1).Hidden = True wks.Columns(2).NumberFormat = "ddd.dd.mm.yy" wks.Columns(2).ColumnWidth = 15 wks.Rows(4).RowHeight = 10 End Sub
So kannst Du es in die Schleife mit einbauen und alles läuft von selbst.
5.) Wie ändere ich die Reihenfolge der Tabellenblätter? "Feiertage" und "Monatsvorlage" sollen ganz nach hinten (re.) , Kalender immer ganz vorne (li.)
Hier wird festgelegt wo das Tabellenblatt eingefügt wird. Lösche +1, dann passt es wieder.
3.) Wenn der Kopiervorgang abgeschlossen ist, sieht man auf dem Tabellenblatt "Montasvorlage noch, was zum kopieren markiert wurde und auch dort wo es
eingefügt wurde, sind die eingefügten ausgewählt. Wie bekomme ich das weg?C&P ist die langsamste Variante.
Code
Alles anzeigenSub KopGelbAusMonatsvorlageInMonate_neu() Dim wksMonat As Worksheet Dim i As Byte Dim Zeile As Byte Dim Spalte As Byte For i = 3 To 14 Set wksMonat = ThisWorkbook.Worksheets(i) For Spalte = 7 To 31 For Zeile = 1 To 4 wksMonat.Cells(Zeile, Spalte) = Spalte + i - Zeile Next Zeile wksMonat.Cells(5, Spalte).FormulaLocal = "=SUMME(" & Cells(1, Spalte).AddressLocal & ":" & Cells(4, Spalte).AddressLocal & ")" Next Spalte Next i End Sub
Mit der Schleife entfällt das lästige selectieren
Frage: Welche mathematische Grundlage liegt dem Bereich "Blau" zugrunde?
Bis später
Stefan
-