Wie erstelle ich in Excel mehrere Tabellenblätter, bei denen sich das Datum wochenweise fortlaufend aktualisiert?

...komplette Frage anzeigen

3 Antworten

Die von Dir angegebene Namensstrukrur ist selbst für ein Makro (und Du brauchst eins, wenns automatisch gehen soll!) äusserst ungünstig und schafft unnötige Komplikationen. Benenne es doch immer nach dem Datum des Montags, also 23.01 oder 01-23, plus 5 kann man doch sowieso im Kopf!

Dann ginge es mit einfachem Hochzählen immer Datum aus dem letzten Blattnamen +7.

Oder KW03, KW04,..., das ist aber nicht so leicht im Kopf zu datieren.

Entscheide Dich für eine dieser Lösungen, dann kriegst Du auch ein Makro dazu!

Stefy83 21.01.2017, 09:42

Ach Gott ja manchmal sieht man den Wald vor lauter Bäumen nicht. KW-Benennung wäre für unseren Fall perfekt! 

0
Iamiam 22.01.2017, 17:01
@Stefy83

Ich hab Dir mit wenig Aufwand ein komfortables Werkzeug erstellt, aber um es zu nutzen, musst Du einige Kleinigkeiten berücksichtigen:

  1. Du musst die Mappe als .xlsm speichern (es ginge auch mit einem Makro in Deiner Personl.xlsm, aber dazu müsste ich den genauen Dateinamen samt Pfad Deiner Personl.xlsm wissen. Oder Du öffnest sie und weist der Autoform (ich verwende immer ein Textfeld, das ist am variabelsten gestaltbar) das Makro aus der Liste selber zu
  2. Achte darauf, dass der Name Deines Blattes  immer eine zweistellige Zahl am Ende hat (KW4 ergibt Fehler, KW04 geht, auch KW04(2) ergäbe Fehler)
  3. Definiere im Makro den zu löschenden Bereich [...ClearContents] nach Bedarf
  4. Fixiere im aufrufenden Blatt Titelzeilen/-Spalten nach Bedarf, sämtliche Formate des Blattes und seiner Zellen werden übernommen (weil Blatt kopiert wird)
  5. Hast Du das µ über den Knopf (das Textfeld) versehentlich ausgelöst, kannst Du das erstellte Blatt einfach wieder löschen.
  6. Das µ mit "before:="  verschiebt die alten Blätter nach hinten, mit "after" setzt es das neue dahinter


  • Sub NeueWocheErstellen()
  • Dim ACName
  • ACName = ActiveSheet.Name 'hält den Namen fest
  • ActiveSheet.Copy Before:=ActiveSheet 'alternativ: After:=
  • ActiveSheet.Name = Left(ACName, 2) & Right(ACName, 2) + 1
  • Range("B3:G7").Select  'ggf anders definieren
  • Selection.ClearContents 'erhält die ZellFormatierungen, und auch das aufrufende Textfeld samt Makrozuweisung
  • End Sub

Rückfragen hier, damit ich das sehe. (evtl nicht mehr heute, war auch gestern nicht aktiv, sorry)

0
Iamiam 22.01.2017, 17:16
@Iamiam

Korrektur dieser Zeile zu

  • ActiveSheet.Name = Left(ACName, 2) & Format(Right(ACName, 2) + 1, "00")

(hatte eine vor-Fassung kopiert, die Fehler verursacht.)

0
Stefy83 23.01.2017, 11:50
@Iamiam

Boah, da hast Du Dir aber mal richtig Mühe gegeben, tausend Dank. Ich teste es mal aus :) Danke danke danke

1
Iamiam 23.01.2017, 23:23
@Stefy83

Ergänzung: Ich hab nicht die Korrelation von Kalenderwochen und Datum im Kopf, und ich nehme an, es geht auch vielen anderen so.

Ich hab deshalb diesen Vorschlag:

Setze in eine Zelle (am besten in einer eingrefrorenen Titelzeile/spalte) das Datum 1.1.2017 rein und formatiere es nur JJJJ, Du siehst also nur 2017 (bei meinem Beispiel in A1)

Der Montag der lfd Kalenderwoche ist dann (zB in B1):

=(Text(Rechts(Zelle("Dateiname");2)*7-Rest($A1;7)-4;"T.M.")&Jahr(A1))*1

Da es durch das *1 zu einer Datumszahl wird, kannst du das beliebig formatieren.

Zur Probe kannst Du ja dann nochmal zurückverwandeln mit

=Kalenderwoche(B1;21)

zur 21:(aus xl-Hilfe, weil das weitgehend unbekannt ist!): 

KALENDERWOCHE (Funktion) - Office-Support

... System 2    Die Woche, die den ersten Donnerstag des Jahrs umfasst, ist die erste Kalenderwoche mit der Nummer 1. Dieses System entspricht der in ISO 8601 spezifizierten Methode, welche im Allgemeinen als europäisches Wochennummerierungssystem bezeichnet wird.

0

Wenn Du für jeden Wochentag eine eigene Spalte hast, nimmst Du als Referenzzelle für den ersten Wochentag die Datumszelle des letzten Wochentags der vorausgegangenen Woche auf dem Blatt davor und addierst 1 dazu.

Von Hand oder mit einem Makro. Aus meiner Sicht wird das mit Formeln nichts möglich sein. Geht es dir um einen Zellinhalt oder den Namen des Tabellenblatts? Ein Makro, das nur einmal läuft und die Tabellenblätter anlegt, ist keine große Sache.

Stefy83 20.01.2017, 20:19

Es geht mir um den Namen des Tabellenblattes. So dass sie quasi fortlaufend mit Datum benannt werden.

0
Iamiam 20.01.2017, 21:45
@Stefy83

An den Blattnamen kommst Du mit Formeln nicht ran, das kann nur ein Makro. Willst Du das?

1
Ninombre 21.01.2017, 07:13
@Stefy83

Sub wochenblaetter_anlegen()
Dim beginndatum As Date
beginndatum = "02.01.2017"
For i = 1 To 52 'wiewiele wochen werden benötigt?
Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = beginndatum & "-" & DateAdd("d", beginndatum, 5)
beginndatum = DateAdd("d", beginndatum, 7)
Next
End Sub

0
Britzcontrol 21.01.2017, 08:21
@Iamiam

@Iamiam
Blattname mit


=RECHTS(ZELLE("dateiname");LÄNGE(ZELLE("dateiname"))-FINDEN("]";ZELLE("dateiname")))

=RECHTS(ZELLE("dateiname");LÄNGE(ZELLE("dateiname"))-FINDEN("]";ZELLE("dateiname")))


auslesen.

Gruß aus Berlin

0
Ninombre 21.01.2017, 13:57
@Ninombre

wenn es nur die KW sein sollen:

Sub wochenblaetter_anlegen()
For i = 1 To 52 'wiewiele wochen werden benötigt?
Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "KW " & i
Next
End Sub

0

Was möchtest Du wissen?