PDA

Vollständige Version anzeigen : Monatsletzter


moritz20010
24.08.2017, 15:16
Hallo EXCEL-User,
ich bin dabei mir einen pers. Kalender für 2018 zu erstellen.

Monat Jan bis Nov ist problemlos.

Bei Monat Dez tritt folgendes Problem auf:
Folgenden Code habe ich verwendet.
Sub TischKalenderErstellen()
Application.ScreenUpdating = False
TbBlatt = "TK" & Userform1.AktJahr.Text
Set Kalender = Worksheets(TbBlatt)
Jahr = Userform1.AktJahr
Sp = 2
Ze = 3
Kalender.Activate
With Kalender
.Cells.Clear
For Monat = 1 To 12
MonAnfang = CDate("01." & Monat & "." & Jahr)
MonEnde = CDate("01." & Monat + 1 & "." & Jahr) - 1

usw.


Userform1.AktJahr = 2017

Bei Monat Dez erscheint bie "MonAnfang" der 01.12.2017
aber bei "MonEnde" erscheint nicht der 31.12.2017 sondern der 12.01.2017

Wie kann das sein?
Bei mir ist Office 2010 Premium installiert.

Hat jemand die Lösung?

Gruß Moritz

RPP63neu
24.08.2017, 15:48
Moin Moritz!
Lasse mal die Schleife nebst String-Konvertierung (die bei Dir zum Fehler führt) sein und benutze mal folgendes:
<span style='font-style:italic; margin-left:36px; color:#008000; font-weight:bold;'>Modul Modul1</span><pre style='border:thin solid #000000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Option</span> <span style='color:#0000EE'>Explicit</span> <span style='color:#0000EE'>Sub</span> RPP() <span style='color:#0000EE'>Const</span> Jahr& = <span style='color:#DDAA00'>2017</span> <span style='color:#0000EE'>With</span> Range(<span style='color:#FF0000'>&quot;B3:M33&quot;</span>) .Formula = _ <span style='color:#FF0000'>&quot;=IF(MONTH(DATE(&quot;</span> & Jahr & <span style='color:#FF0000'>&quot;,COLUMN(A1),ROW(A1)))&lt;&gt;COLUMN(A1),&quot;</span><span style='color:#FF0000'>&quot;&quot;</span><span style='color:#FF0000'>&quot;,DATE(&quot;</span> & Jahr & <span style='color:#FF0000'>&quot;,COLUMN(A1),ROW(A1)))&quot;</span> .NumberFormat = <span style='color:#FF0000'>&quot;dd.mm.yyyy&quot;</span> .Copy: .PasteSpecial xlPasteValues .EntireColumn.AutoFit <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>With</span> Application .CutCopyMode = <span style='color:#0000EE'>False</span> .Goto Cells(<span style='color:#DDAA00'>1</span>) <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span> </pre><br>
Gruß Ralf

pefeu
24.08.2017, 16:44
Hallo,

versuche es so
Public Function LastDay(myDate As Date) As Integer

LastDay = Day(DateSerial(Year(myDate), Month(myDate) + 1, 0))

End Function

Public Sub test()

Debug.Print LastDay("15.02.08")
Debug.Print LastDay(Date)
Debug.Print LastDay("2009/12/08")
Debug.Print LastDay("2017/12/15")

End Sub

Gruß Peter

moritz20010
25.08.2017, 10:48
:mrcool: Hallo Ralf und Peter,

danke für Eure Hilfe.

Ich habe das Problem mittlerweile wie folgt erledigt:

Code Zeile
MonEnde = CDate("01." & Monat + 1 & "." & Jahr) - 1
ersetzt durch folgende Zeile
MonEnde = DateSerial(Year(MonAnfang), Month(MonAnfang) + 1, 0)

nun klappt´s

Gruß Moritz

RPP63neu
25.08.2017, 11:35
Moin!
Wäre dennoch sinnvoll gewesen, mein Makro mal durchlaufen zu lassen.
Da ich eine Formel en bloc in den gesamten Bereich schreibe, dauert die Laufzeit einen Wimpernschlag.
Auch, wenn die Schleife (aus Übungsgründen?) "Spaß macht":
Sie ist hier schlicht nicht notwendig!

Gruß Ralf

moritz20010
26.08.2017, 09:23
Hallo Ralf,

danke für deinen Hinweis.
Dein Makro läuft super.
Allerdings baut es das Jahr (Monate) nebeneinander auf.
Für meine Kalenderlösung benötige ich die Monate aber untereinander.
Hast Du heirfür auch eine Lösung?

MfG Moritz

RPP63neu
26.08.2017, 11:23
Moin Moritz!
Wird ja immer einfacher! ;)
<pre style='border:thin solid #000000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> RPP() <span style='color:#0000EE'>With</span> Range(<span style='color:#FF0000'>&quot;B3&quot;</span>) .Value = DateSerial(<span style='color:#DDAA00'>2017</span>, <span style='color:#DDAA00'>1</span>, <span style='color:#DDAA00'>1</span>) .Resize(<span style='color:#DDAA00'>365</span>, <span style='color:#DDAA00'>1</span>).DataSeries <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre>

Gruß Ralf

moritz20010
27.08.2017, 09:22
Hallo Ralf,

danke für die Ergänzung.

Ist ja rasend schnell und klappt wunderbar.

Mfg Moritz :)