Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
724to728
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler im Macro?

Fehler im Macro?
03.02.2006 08:10:24
Rene
Moin zusammmen,
Ich hatte mein Problem schon mal unter "Stundennachweiß" erläutert,aber leider keine Antwort bekommen.Versuche deshalb noch ein mal Hilfe zu bekommen.
Was ich nun schon herausgefunden habe ist das der Fehler nur ist wenn der Monatsende der 30. ist und dieser auf einen Sonntag fällt,dann legt es mir die Woche des folge Monats an.Sonst klappt es prima.
Das Problem liegt bestimmt im folgendem Code ich kann ihn aber leider nicht selber finden.
Sub WochenAnlegen()
Dim datStart As Date, datEnd As Date, lKW As Long
Dim strName As String
On Error Resume Next
Application.ScreenUpdating = False
datStart = DateSerial(Year(Date), Month(Date), 1)
datEnd = DateSerial(Year(Date), Month(Date), 31)
datStart = datStart - Weekday(datStart, 2) + 1 ' geht auf den Montag datEnd = DateSerial(Year(Date), Month(Date), 31)
For lKW = datStart + 7 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)
Range("AK1").Value = CDate(lKW)
Next lKW
With Worksheets(1)
.Name = Format(ISOWeek(CDate(datStart)), "00") & ".-Woche"
strName = Left(.Name, 3)
.Select
End With
If Year(datStart) Year(Date) Or Month(datStart) Month(Date) Then
Range("AK1").Value = DateSerial(Year(Date), Month(Date), 1)
Else
Range("AK1").Value = CDate(datStart)
End If
strName = JahrOrdnerAnlegen(datEnd) & strName _
& "-" & Format(ISOWeek(CDate(lKW - 7)), "00") & ".Woche.xls"
ActiveWorkbook.SaveAs strName
Application.ScreenUpdating = True
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

Function JahrOrdnerAnlegen(datBis As Date) As String
Dim sPath As String, dat As Date
dat = Range("AK1").Value
sPath = "C:\Temp\Stunden\"
On Error Resume Next
MkDir sPath & Year(dat)
sPath = sPath & Year(dat) & "\"
MkDir sPath & Format(dat, "mmmm")
sPath = sPath & Format(dat, "mmmm") & "\"
On Error GoTo 0
JahrOrdnerAnlegen = sPath
End Function
Weithin ist das Problem von 1. unter "Stundennachweiß" auch noch offen.
Es wäre nun prima wenn sich einer mein Problem mal ansieht und mir dann wenigstes sagt ob es eine Lösung dafür gibt oder ob man es anders lösen muß.
Hier ist die Tabelle noch mal:
https://www.herber.de/bbs/user/30558.xls
Danke im voraus
Gruß Rene

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Macro?
03.02.2006 14:27:28
Luschi
Hallo Rene,
Du berechnest das Monatsende immer mit 31 Tagen. Ich mache das so:

If Month(Date) = 12 Then
datEnd = DateSerial(Year(Date), Month(Date), 31)
Else
datEnd = DateSerial(Year(Date), Month(Date) + 1, 1) - 1
End If

Dann klappt das auch mit dem Monat April.
Gruß von Luschi
aus klein-Paris
AW: Fehler im Macro?
03.02.2006 16:31:51
Rene
Hallo Luschi,
Vielen Dank für die Antwort werde es mal testen.
Gruß Rene
AW: Fehler im Macro?
03.02.2006 17:34:15
Rene
Hallo Luschi,
Danke für deine Hilfe habe es nun so gelöst:
If Month(Date) = 31 Then
datEnd = DateSerial(Year(Date), Month(Date), 31)
Else
datEnd = DateSerial(Year(Date), Month(Date), 30)
datStart = datStart - Weekday(datStart, 2) + 1
End If
und dieses klappt prima so.
Hast du nun noch eine Idee warum ich in D3 immer Name angezeigt bekomme und erst das Datum wenn ich auf die Zelle D3 geklickt habe? siehe "Stundennachweiß" von mir.
Gruß Rene
Anzeige
AW: Fehler im Macro?
03.02.2006 18:09:54
Luschi
Hallo Rene,
If Month(Date) = 31 Then
Was soll das werden; es gibt keinen 31. Monat im Jahr; es wird also immer der Else-Zweig ausgeführt.
Excel besitz einen sehr!!! genauen Kalender. Sinn meiner Methode ist, daß ich ausgehend von aktuellen Monat das Datum des ersten Tages des nächsten Monats ermittle und dann einen Tag abziehe. So erhalte ich das Datum des letzten Tages des aktuellen Monats. (außer beim Dezember, der hat immer 31 Tage). Der Februar hat meistens 28 Tage und manchmal 1 Tag mehr. Excel weiß, welches Jahr ein Schaltjahr ist.
Dein 2. Problem tritt bei mir nicht auf.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Fehler im Macro?
03.02.2006 20:52:30
Rene
Hi Luschi,
Ok habe es nun so gemacht:
datStart = DateSerial(Year(Date), Month(Date), 1)
If Month(Date) = 12 Then
datEnd = DateSerial(Year(Date), Month(Date), 31)
Else
datEnd = DateSerial(Year(Date), Month(Date) + 1, 1) - 1
End If
datStart = datStart - Weekday(datStart, 2) + 1
und es klappt doch so hatte nur vorhin Problem mit der einreihung in meinen Code,hatte dann das mit dem 31 gemacht und da klappte es aber auch.
Das mit D3 ist aber bei mir trotzdem noch z.B. bei dem 31.01. da bekomme ich immer #Name in D3 angezeigt.
Gruß Rene
AW: Fehler im Macro?
04.02.2006 09:54:04
Luschi
Hakllo Rene,
hier ein Auszug aus der Excel-Hilfe:
Gibt die fortlaufende Zahl des letzten Tages des Monats zurück, der eine bestimmte Anzahl von Monaten vor bzw. nach dem Ausgangsdatum liegt. Mit MONATSENDE können Sie Rückzahlungs- oder Fälligkeitstermine berechnen, die auf den letzten Tag eines Monats fallen.
Wenn diese Funktion nicht verfügbar ist und den Fehlerwert #NAME? zurückgibt, installieren und laden Sie das Add-In Analyse-Funktionen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Fehler im Macro?
04.02.2006 19:10:32
Rene
Hallo Luschi,
Danke für deine Hilfe,aber die Add Ins sind installiert und auch aktiviert.Es klappt ja z.B.auch bei dem 30.04.2006 sobald ich aber den 31.als letzten Tag habe geht es erst wenn ich auf D3 geklickt habe.
Ich verzweifle hier noch bald.
Gruß Rene
Probleme sind nun gelöst!!!
04.02.2006 19:32:41
Rene
Hallo zusammen,
Ok habe nun doch meine Probleme gelöst bekommen.
Das 1. Problem habe ich so gelöst:
In D3 steht nun =WENN(Y4="";MONATSENDE(AK1;0);Y4)
(In AK1 steht der Monat drin)
und jetzt klappt es. Eigentlich doch simpel aber man sieht eben den Wald vor Bäumen nicht :)
Danke dir auch noch mal Luschi für deine Hilfe des 2.Problems
Gruß Rene
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige