Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kalender Steuerelement liefert Blödsinn

Kalender Steuerelement liefert Blödsinn
23.01.2009 12:43:00
Heiko
Hallo, zusammen,
irgendwie komm ich mit dem Kalender Steuerelement mscal.ocx nicht klar:
Das heutige Datum anzeigen lassen ist kein Problem. Wenn ich die einzelnen komponenten wie Jahr, Monat und Tag in Form von Zahlen auslese, kommt auch eine korrekte Anzeige. Z.B.: mit
Jahr = calendar1.year spuckt er 2009 aus, bei monat = calendar1.month ist das ergebnis korrekt 1.
Wenn ich aber mit Format() den Monat in den Monatsnamen ändern will mit
monat = format(calendar1.month, "mmmm"), dann ist monat (1) plötzlich "Dezember". Das gleiche Spiel passiert mit dem Tag: der erste Januar (tag 1) wird mit tag = format(calendar1.day, "dddd") plötzlich zu Freitag und mit "dd" zum 31.sten.
Kann sich das jemand erklären?
Hat das womöglich mit 1904 Datumswerten zu tun?
Vielen Dank im Voraus,
Heiko
Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalender Steuerelement
23.01.2009 12:51:00
Hajo_Zi
Hallo Heike,
es gibt nur 12 Monate. Der 12 Tag in Excel ist der 12.01.1900 und von max. 12 Bildest Du das Format.
Meist sitzt der Fehler 30 cm vor dem Bildschirm

Danke für die Blumen!
23.01.2009 13:26:00
Heiko
Vielen Dank an Tino und Rudi
Hi, Hajo,
tut mir leid, dass ich Dich belästigt habe. Es gibt jedoch keinen Grund, beleidigend zu werden. Ich finde es nicht gerade höflich, mich als Fehler und auch noch als Heike zu bezeichnen. Im Übrigen sitze ich 70 cm vor dem Bildschirm.
Man stellt hier Fragen, um von denen was zu lernen, die es besser können. Wenn Dir das zu doof ist, antworte nicht! Wenn Ihr als Excel Profis unter Euch bleiben wollt, wozu dann dieses Forum?
Anzeige
AW: eigene Nase
23.01.2009 13:32:46
Hajo_Zi
Hallo Heiko,
das mit dem einem Buchstaben und der falschen Zentimenter angabe tut mir Leid.
Fasse Dir selbst an die Nase Du schreibst "Kalender Steuereelement liefert Blödsinn" damit machst Du also MS schlecht. Die können nicht mal einen richtigen Kalender liefern.
Gruß Hajo
Anzeige
Fragen erlaubt?
23.01.2009 14:56:20
Heiko
Mannomann, ganz schön rege Teilnahme!
Mit 2 bis 3 richtig guten, sachlichen Antworten konnte ich sogar was anfangen. Vielen Dank an Ramses, Tino, und die anderen.
Leider hatte ich aus Versehen das falsche Level angeklickt und habs fast bis zuletzt nicht gemerkt...
Aber ehrlich gesagt komme ich entweder mit dem Excel-Humor einiger "Helfer" nicht ganz klar oder aber einige waren wirklich richtig genervt. "Fehler sitzt vor dem Bildschirm", oder lustige Abkürzungen. Klingt alles irgendwie nach "Mann, ist der doof!"
Kann man hier Fragen stellen, wenn man was nicht versteht?
TDAADMMIKBGH!
Trotzdem Danke An Alle, Die Mir Mit Ihren Konstruktiven Beiträgen Geholfen Haben.
Ciao, Leute
Anzeige
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 12:51:00
Rudi
Hallo,
vollkommen korrekt.
der Datumswert 1 ist der 1.1.1900
monat=format(calendar1,"MMMM")
Gruß
Rudi
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 13:41:21
Heiko
Hi, Rudi,
vielen Dank für die Antwort,
ich verstehs aber leider immer noch nicht:
Mit dem Kalender kann ich doch ein beliebiges Datum zurückgeben, indem ich auf eine Schaltfläche klicke.
Angenommen ich wähle dort den 22. Januar 2009, gibt mir das Steuerelement korrekt als Tag 22, als Monat 1 und als Jahr 2009 zurück.
Wenn ich jedoch das Datum wieder mit Format() in "Text" übersetzen will lautet es plötzlich Sonntag, 22. Dezember 1905 (ich hab übrigens keine 1904 Datumswerte eingestellt!).
Sebst bei Änderung des Jahres über das Flyout Menü bleibt das Jahr mit Format(calendar1.Year, "YYYY") immer bei 1905.
Damit das Steuerelement immer von ganz vorne beginnt zu zählen, als der absolute Tag Nummer 22 (meinetwegen seit 1905), bedeutet das doch, dass die Eingabe des Monats und des Jahres gar nicht berücksichtigt werden, sondern nur der Tag Nummer 22.
Vielleicht ist ja einfach Format() die falsche Funktion dafür...
Ich hab mal die Datei hochgeladen. Wenn Du Lust hast, kannst Du ja mal reinschauen...
https://www.herber.de/bbs/user/58717.xls
Vielen Dank und viele Grüße,
Heiko
Anzeige
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 13:46:48
Tino
Hallo,
stell Dir die Format Funktion so vor als ob Du eine Zelle Formatierst.
Format braucht in diesem Fall ein Datum, kein Tag und kein Monat und auch kein Jahr.
Gruß Tino
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 13:53:00
Tino
Hallo,
hier noch einige Beispiel, vielleicht ist es so verständlicher.
Debug.Print Date, Format(Date, "mm")    'Monat Zahl 
Debug.Print Date, Format(Date, "mmm")   'Monat Name kurz 
Debug.Print Date, Format(Date, "mmmm")  'Monat Name lang 

Debug.Print Date, Format(Date, "dd")    'Tag Zahl 
Debug.Print Date, Format(Date, "ddd")   'Wochentag kurz 
Debug.Print Date, Format(Date, "dddd")  'Wochentag lang 

Debug.Print Date, Format(Date, "yy")    'Jahr zweistellig 
Debug.Print Date, Format(Date, "yyyy")  'Jahr vierstellig 


Gruß Tino

Anzeige
Kalender: irgendwas klappt nicht...
23.01.2009 14:06:00
Heiko
Hi, Tino,
ich seh ein, dass es wohl mit Format() nicht klappt. Ich habs jetzt mal mit MonthName und WeekdayName probiert.
Ergebnis: Egal welche Schaltfläche ich klicke, der zurückgegebene Tag ist immer einer zu weit. Also aus Dienstag wird Mittwoch, aus Sonntag wird Montag... usw.
Der Zahlenwert für den Tag ist korrekt, auch der Monat wird korrekt zurückgegeben. Die Option mit vbMonday als FirstDayOfWeek ändert auch nichts...
Übrigens unabhängig von der 1904 Einstellung.
Ich steh auf dem Schlauch. Da Hajo der Ansicht ist, Microsoft macht keine Fehler, muss ich wohl weiter bei mir suchen. Hast Du noch nen Tip?
Hab die geänderte Datei nochmal hochgeladen.
https://www.herber.de/bbs/user/58719.xls
Ciao, Heiko
Anzeige
AW: Kalender: irgendwas klappt nicht...
23.01.2009 14:16:04
D.Saster
Hallo,
wie Hajo schon sagt: PEBKAC
yName = Calendar1.Year
mName = Format(Calendar1, "MMMM")
tName = Format(Calendar1, "DDDD")
Gruß
Dierk
Problem Exists Between Keyboard And Chair
AW: Kalender: irgendwas klappt nicht...
23.01.2009 14:19:45
RS
Hi ko,
In Amerika, dem Land von MS (das keine Fehler macht!) beginnt die Woche mit dem Sonntag!
Bei uns, so glaube ich wenigstens, mit dem Montag. Oder warum sollte man sich vor und nicht nach der Arbeit ausruhen?
Vielleicht würde es auch bei Deinem Level helfen, ab und zu einen Blick in Hilfe zu werfen ;-)

tName = WeekdayName(Weekday(Calendar1, vbMonday), , 2)


Grüsse RS

Anzeige
AW: Kalender: irgendwas klappt nicht...
23.01.2009 14:31:00
D.Saster
Hallo,

Bei uns, so glaube ich wenigstens, mit dem Montag


so ist das nach DIN EN 28601 seit 1993.
Gruß
Dierk

AW: Kalender: irgendwas klappt nicht...
23.01.2009 14:46:00
Ramses
Hallo
Sorry,. die aktuell gültige Norm ist die ISO 8601 (seit Sept/2006) und die Definition gilt erst seit Mai 1996
Das der Montag der erste Tag der Woche in Europa ist, wurde allerdings schon in den frühen 70ern festgelegt :-)
Gruss Rainer
Anzeige
so...
23.01.2009 14:20:20
Tino
Hallo,
so sollte es gehen.
Private Sub Calendar1_click()
Dim yName&, mName$, tName$
Dim jahr&, monat&, Tag&

jahr = Calendar1.Year
monat = Calendar1.Month
Tag = Calendar1.Day

Cells(1, 2).Value = jahr
Cells(2, 2).Value = monat
Cells(3, 2).Value = Tag

yName = Format(Calendar1, "yyyy")
mName = Format(Calendar1, "mmmm")
tName = Format(Calendar1, "dddd")

Cells(1, 3).Value = yName
Cells(2, 3).Value = mName
Cells(3, 3).Value = tName


End Sub


Gruß Tino

Anzeige
AW: Kalender: irgendwas klappt nicht...
23.01.2009 14:21:14
Ramses
Hallo
Private Sub Calendar1_click()
    jahr = Calendar1.Year
    Monat = Calendar1.Month
    Tag = Calendar1.Day
    
    Cells(1, 2).Value = jahr
    Cells(2, 2).Value = Monat
    Cells(3, 2).Value = Tag
    
    Cells(1, 3).Value = jahr
    Cells(2, 3).Value = Format(DateSerial(jahr, Monat, Tag), "MMMM")
    Cells(3, 3).Value = Format(DateSerial(jahr, Monat, Tag), "DDDD")
    
End Sub

Gruss Rainer
Anzeige
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 13:54:54
Ramses
Hallo
ich möchte nun nicht sagen, dass 70 cm 2.3 mal soviel Fehler produzieren :-),... aber bei dem von dir angegeben Level sollten dann die Grundlagen der Datumsberechnung schon bekannt sein :-)
yName = Format(Calendar1.Year, "yyyy")
Calender1.Year = 2009
Deine Umformaierung in der oben genannten Anweisung führt Dazu, dass EXCEL 2009 als fortlaufende Nummer interpretiert und daraus, wie in der Datumsberechnung üblich, das Jahr berechnet.
Das Ergebnis 1905 ist korrekt, weil der 2009 Tag / 365 = 5.50xxx ist und somit das Jahr 1905 ergibt.
Für die Grundlagen der Datums-/Zeitberechnung schau mal hier voibei
http://www.online-excel.de/excel/singsel.php?f=128
http://www.online-excel.de/excel/singsel.php?f=129
Gruss Rainer
Anzeige
Sorry, falsches Level angegeben...
23.01.2009 14:14:50
Heiko
Oh, hab ich aus Versehen "VBA-gut" angegeben? Sorry, daher also die Nettigkeiten.
Ich hab keine Ahnung von VBA und probiere einfach nur rum...
zu Deiner Antwort: vielen Dank! Damit kann ich was anfangen. :-)
Gruß, Heiko
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 12:55:00
Tino
Hallo,
wie wäre es hiermit?
monat = MonthName(Month(Calendar1))
Gruß Tino
Anzeige
AW: Kalender Steuerelement liefert Blödsinn
23.01.2009 14:35:00
Max
Microsoft selbst ist der Fehler.
bitte um Begründung in diesem Fall oT.
23.01.2009 14:39:40
Tino
AW: Kalender Steuerelement liefert Blödsinn
24.01.2009 11:04:00
Sigi
Hallo Heiko,
die Kalender in Excel und VBA sind leider nicht identisch!
Der Kalender in Excel beginnt mit Tag 1 = 01.01.1900. Der Excel-Kalender kennt aber auch den 29.02.1900, den es - wie wir wissen - nicht gab. Die Entwickler bei Microsoft wussten sehr wohl, dass es den 29.02.1900 nicht gab; aber warum haben sie diesen Tag trotzdem in den Excel-Kalender aufgenommen?
Nun, sie wollten dem damals marktbeherrschendem Kalkulationsprogramm "Lotus-1-2-3" Kunden abnehmen. Microsoft musste sicherstellen, dass man mit Excel eine Datei von Lotus-1-2-3 öffnen und lesen konnte. Aber in Lotus-1-2-3 (!!) war leider dieser 29.02.1900 intregriert. Also musste Microsoft ebenfalls diesen 29.02.1900 in den Excel-Kalender mit aufnehmen.
In VBA hat Microsoft diesen 29.02.1900 nicht mehr aufgenommen! Die Kalender von Excel und VBA stimmen dadurch erst ab dem 01.03.1900 überein! In VBA musste dadurch der Tag 1 nach vorne rutschen und wurde deshalb zum 31.12.1899!
Wenn du in VBA den Monat des 1. Tages ermittelst, erhälst du natürlich den "Dezember". Und beim Tag erhälst du korrekt den "31."
Ich hoffe, dies klärt deine Frage.
Grüße
Sigi
Anzeige
AW: Kalender Steuerelement liefert Blödsinn
24.01.2009 12:20:49
Tino
Hallo,
das hat jetzt aber nichts mit dem ausgewählten Tag zu tun.
Wenn ich mit Format den Wochentag haben möchte,
muss ich ein komplettes Datum übergeben und nicht nur eine Zahl.
Gruß Tino
AW: Kalender Steuerelement liefert Blödsinn
24.01.2009 20:02:10
Sigi
Hi Tino,
du hast schon Recht. Aber Heiko wundert sich doch dass format(calendar1.month, "mmmm") den Dezember ergibt!
Deshalb:
calendar1.month = 1 (Januar), dann folgt doch
format(1, „mmmm“) = "Dezember", da der erste Tag in VBA der 31.12.1899 ist! Den Tag wird er wohl analog ermittelt haben (format(1, "dd").
Gruß
Sigi
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige