Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
708to712
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
708to712
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wochen anlegen

Wochen anlegen
18.12.2005 15:46:21
Rene
Moin zusammen,
Ich habe diesen Code:
Option Explicit
Sub CreateWks()
Dim datStart As Date, datEnd As Date
Dim lKW As Long
Dim iKW As Integer
Dim sKW As String
Application.ScreenUpdating = False
datStart = DateSerial(Year(Date), Month(Date), 1)
datEnd = DateSerial(Year(Date), Month(Date), 31)
For lKW = datStart To datEnd Step 7
Worksheets.Add after:=Worksheets(Worksheets.Count)
iKW = ISOWeek(CDate(lKW))
If lKW = CLng(datStart) And iKW > 1 Then
sKW = iKW & ".-Woche"
ElseIf lKW >= datEnd - 7 And iKW = 1 Then
sKW = ".-Woche" & iKW
Else
sKW = Format(iKW, "00") & ".-Woche"
End If
ActiveSheet.Name = sKW
Next lKW
Application.ScreenUpdating = True
Worksheets(3).Select
End Sub

Private Function ISOWeek(dat As Date) As Integer
With WorksheetFunction
ISOWeek = Fix((dat - .Weekday(dat, 2) - _
DateSerial(Year(dat + 4 - _
.Weekday(dat, 2)), 1, -10)) / 7)
End With
End Function

hier im Forum gefunden und mir angepaßt.Was mir nun noch fehlt ist das es bei 5 Wochen im Monat super klappt nur bei 6 Wochen im Monat nicht(z.B.Jannuar 2006) kann mir einer da bitte weiterhelfen?
Gruß Rene

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wochen anlegen
18.12.2005 21:00:35
Erich
Hallo Rene,
das Makro legt für den 01.01.2006 die 52. Woche an, danach für jeweils 7 Tage später eine weitere Woche, solange dieser Tag noch in den Januar fällt. Der 01.01.2006 ist ein Sonntag, danach folgen 4 weitere Sonntage im Januar, also werden die 1. bis 4. Woche angelegt. Dass nach dem letzten Sonntag noch andere Tage imn Januar sind, die in die 5. Woche fallen, berücksichtigt das Makto nicht.
Eine Möglichkeit wäre, immer vom Wochenbeginn (Montag) auszugehen, dann wird auch die 5. Woche angelegt:

Sub CreateWks()
Dim datStart As Date, datEnd As Date
Dim lKW As Long
Dim iKW As Integer
Dim sKW As String
Application.ScreenUpdating = False
'   datStart = DateSerial(Year(Date), Month(Date), 1)
'   datEnd = DateSerial(Year(Date), Month(Date), 31)
datStart = DateSerial(2006, 1, 1)
datStart = datStart - Weekday(datStart, 2) + 1 ' geht auf den Montag <= datstart
datEnd = DateSerial(2006, 1, 31)
For lKW = datStart To datEnd Step 7
Worksheets.Add after:=Worksheets(Worksheets.Count)
iKW = ISOWeek(CDate(lKW))
sKW = Format(iKW, "00") & ".-Woche"
ActiveSheet.Name = sKW
Next lKW
Application.ScreenUpdating = True
Worksheets(3).Select
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wochen anlegen
18.12.2005 21:56:19
Rene
Hallo Erich,
Danke für deine Mühe,teste es kann mich aber leider erst morgen abend wieder melden.
Bis dann Rene
AW: Wochen anlegen
19.12.2005 10:59:35
Rene
Hallo Erich,
So nun bin ich zu Hause und habe es natürlich probiert und es klappt prima so, habe Year und Month mit angegegeben das es immer für den aktuellen Monat und Jahr macht.Nun hätte ich aber trotzdem noch eine Frage.Wie müßte man in den Code mit einfügen das ich immer aus dem TB "Vorlage" den Inhalt in die neuen Blätter kopiert? Kann das sein das es über dieses gehen würde?
Worksheets("Vorlage").Copy Before:=Sheets(1)
Worksheets("Vorlage").Copy After:=Sheets(?)
Müssen die neuen Tabellen erst gezählt werden,an welcher Stelle müßte dieses stehen und was kommt bei After:=Sheets rein.Hoffe das du (oder natürlich jemand anders) mir weiterhelfen kann.
Gruß Rene
Anzeige
AW: Wochen anlegen
19.12.2005 11:51:11
Erich
Hallo Rene,
dfa kann ich dir zwei Versionen anbieten. Die erste Version könnte den Nachteil haben, dass lange Zeichenketten in Zellen (mehr als ca. 265 Zeichen) nicht vollständig kopiert werden.

Sub CreateWks3()
Dim datStart As Date, datEnd As Date
Dim lKW As Long
Application.ScreenUpdating = False
'   datStart = DateSerial(Year(Date), Month(Date), 1)
'   datEnd = DateSerial(Year(Date), Month(Date), 31)
datStart = DateSerial(2006, 1, 1)
datStart = datStart - Weekday(datStart, 2) + 1 ' geht auf den Montag <= datstart
datEnd = DateSerial(2006, 1, 31)
For lKW = datStart To datEnd Step 7
Worksheets("Vorlage").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(ISOWeek(CDate(lKW)), "00") & ".-Woche"
Next lKW
Application.ScreenUpdating = True
Worksheets(3).Select
End Sub
Sub CreateWks2()
Dim datStart As Date, datEnd As Date
Dim lKW As Long
Application.ScreenUpdating = False
'   datStart = DateSerial(Year(Date), Month(Date), 1)
'   datEnd = DateSerial(Year(Date), Month(Date), 31)
datStart = DateSerial(2006, 1, 1)
datStart = datStart - Weekday(datStart, 2) + 1 ' geht auf den Montag <= datstart
datEnd = DateSerial(2006, 1, 31)
For lKW = datStart To datEnd Step 7
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(ISOWeek(CDate(lKW)), "00") & ".-Woche"
Sheets("Vorlage").Cells.Copy ActiveSheet.Cells(1, 1)
Next lKW
Application.ScreenUpdating = True
Worksheets(3).Select
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wochen anlegen
19.12.2005 17:56:49
Rene
Hallo Erich,
Danke für deine Mühe habe mich für die zweite Version entschieden und es klappt prima so.Werde nun mal schön weiterbasteln an dem Stundenzettel.
Danke erst mal
Grüße aus dem Schaumburger Land
Rene

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige