Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen

Schaltjahr | Herbers Excel-Forum


Betrifft: Schaltjahr von: Werner
Geschrieben am: 04.01.2012 20:54:33

Hallo und guten Abend
in meiner Orginaldatei komme ich nicht weiter und habe deshalb ein Auszug mit dem Problem erstellt.

Wenn das Drehfeld auf ein Schaltjahr kommt soll der 29 Februar sichtbar sein
ansonsten Spalte ausgeblendet werden.
Mit der Sub Worksheet_Change Methode klappt es bei mir nicht

Wer hat eine Lösung?
https://www.herber.de/bbs/user/78215.xls

Vielen Dank im voraus

Tschüss Werner

  

Betrifft: AW: Schaltjahr von: Andre´
Geschrieben am: 04.01.2012 21:12:40

Hallo Werner,

Worksheet_Change wird erst ausgelöst, wenn du z.B. in einer Zelle etwas eingibst und mit der Enter bestätigst.

Versuche es so:

https://www.herber.de/bbs/user/78217.xls


MFG Andre


  

Betrifft: AW: Schaltjahr von: Werner
Geschrieben am: 04.01.2012 21:24:51

Danke Andre
klappt zwar aber ich erkenne nicht was du anders gemacht hast außer den Test.Der Worksheet_Change
Befehl ist doch weiterhin da?

Bitte um Antwort

Werner


  

Betrifft: AW: Schaltjahr von: Werner
Geschrieben am: 04.01.2012 21:36:37

Andre
ich habe es gefundenDu hast das Drehfeld nit dem Makro Test belegt. Klasse- wieder etwas gelernt

Danke und Tschüss
Werner


  

Betrifft: AW: Schaltjahr von: fcs
Geschrieben am: 04.01.2012 21:39:20

Hallo Werner,

wie André schon schrieb: Das Change-Ereignis wird durch die Änderungen mit dem Drehfeld nicht ausgelöst, auch wenn du die Zelle B3 als Target-Zelle prüfst.

Möglichkeit A: Du verwendest das Calculate-Ereignis des Sheets

Private Sub Worksheet_Calculate()
  With Me.Range("BO:BO").EntireColumn
    If Range("B6").Value = "KeinSchaltjahr" And .Hidden = False Then
      .Hidden = True
    ElseIf Range("B6").Value = "Schaltjahr" And .Hidden = True Then
      .Hidden = False
    End If
  End With
End Sub

Möglichkeit B: Du weist dem Drehfeld das folgende Makro zu, welches du vorher in ein allemeines Modul der Datei kopierst.
Public Sub Spalte_BO_Ein_Aus()
  With Range("BO:BO").EntireColumn
    If Range("B6").Value = "KeinSchaltjahr" Then
      .Hidden = True
    Else
      .Hidden = False
    End If
  End With
End Sub

Möglichkeit C:
Du verwendest das Drehfeld/Spinbutton aus den Active-X-Steuerelementen mit folgendem Ereignismakro:
Private Sub SpinButton1_Change()
  With Me.Range("BO:BO").EntireColumn
    If Range("B6").Value = "KeinSchaltjahr" Then
      .Hidden = True
    Else
      .Hidden = False
    End If
  End With
End Sub

Unter den Eigenschaften des Spinbuttons stellst du ein:
LinkedCell: B3
Min: 1900
Max: 9999


Gruß
Franz


  

Betrifft: Schaltjahrformel einfacher von: Erich G.
Geschrieben am: 05.01.2012 01:24:12

Hi Werner,
deine Formel in B6 für das Schaltjahr erscheint mir zu kompliziert. Hier drei Alternativen:

 B
32012
4 
5 
6Schaltjahr
7Schaltjahr
8Schaltjahr
9Schaltjahr

Formeln der Tabelle
ZelleFormel
B6=WENN(TAG(DATUM(REST(B3;400)+100;3;))=29;"";"Kein ")&"Schaltjahr"
B7=WENN(TAG(DATUM(B3;2;29))=1;"Kein ";"")&"Schaltjahr"
B8=WENN(TAG((3&-B3)-1)=28;"Kein ";"")&"Schaltjahr"
B9=WENN(TAG(H5+59)=1;"Kein ";"")&"Schaltjahr"

Auch die Formel in BP5
=WENN(BO5<>"";BO5+1;BN5+1)
kannst du einfacher schreiben:
=MAX(BO5;BN5)+1

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Schaltjahrformel einfacher von: Luschi
Geschrieben am: 05.01.2012 07:28:37

Hallo Erich,

das hier ist die offzielle Formel zur Erkennung des Schaltjahres von M$:
=IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"Leap Year", "NOT a Leap Year")
zu dt.
=WENN(ODER(REST(A1;400)=0;UND(REST(A1;4)=0;REST(A1;100)<>0));"Leap Year"; "NOT a Leap Year")
siehe: http://support.microsoft.com/kb/214019/EN-US vom 13.12.2011

Interessant ist auch dieser Artikel: http://support.microsoft.com/kb/214326/de
Dort wird das Schaltjahr-Problem von Excel 2000 beschrieben; aber auch Excel XP. 2003, 2007 und 2010 SP1 haben dieses Problem.
Es gibt in diesen Excel-Versionen den Tag '20.02.1900'
Doch auf welchen Tag zur ERmitlung des Schaltjahres soll man sich denn Berufen; dazu ein kleines Bildchen!

Gruß von Luschi
aus kein-Paris




  

Betrifft: AW: Schaltjahrformel einfacher von: Erich G.
Geschrieben am: 05.01.2012 09:31:42

Hi Luschi,
danke, aber: Was willst du mir damit sagen?

Ich habe eine Weile gebraucht dafür, herauszubekommen, was du da eigentlich berechnet hast.
Was passiert da beim Übergang vom 03.03.1900 zum 04.03.1900? Was wird da zum Schaltjahr?
Ich glaube, da hast du Äpfel und Birnen ein wenig vertauscht:

Die Schaltjahresformeln gehen von einen Jahr als Parameter aus, nicht von einem Datum...
Hast du gewusst, dass du z. B. überprüft hast, ob das Jahr 1960 ein Schaltjahr war?

Hier deine Grafik (?!) als Tabelle, etwas ergänzt und mit Formeln:

 ABCDEF
1???Jahr"29.2." in Jahr ErichM$
221.02.19005229.02.1952 SchaltjahrLeap Year
322.02.19005301.03.1953 Kein SchaltjahrNOT a Leap Year
423.02.19005401.03.1954 Kein SchaltjahrNOT a Leap Year
524.02.19005501.03.1955 Kein SchaltjahrNOT a Leap Year
625.02.19005629.02.1956 SchaltjahrLeap Year
726.02.19005701.03.1957 Kein SchaltjahrNOT a Leap Year
827.02.19005801.03.1958 Kein SchaltjahrNOT a Leap Year
928.02.19005901.03.1959 Kein SchaltjahrNOT a Leap Year
1029.02.19006029.02.1960 SchaltjahrLeap Year
1101.03.19006101.03.1961 Kein SchaltjahrNOT a Leap Year
1202.03.19006201.03.1962 Kein SchaltjahrNOT a Leap Year
1303.03.19006301.03.1963 Kein SchaltjahrNOT a Leap Year
1404.03.19006429.02.1964 SchaltjahrLeap Year
1505.03.19006501.03.1965 Kein SchaltjahrNOT a Leap Year

Formeln der Tabelle
ZelleFormel
B2=A2
C2=DATUM(A2;2;29)
E2=WENN(TAG(DATUM(A2;2;29))=1;"Kein ";"")&"Schaltjahr"
F2=WENN(ODER(REST(A2;400)=0;UND(REST(A2;4)=0;REST(A2;100)<>0)); "Leap Year"; "NOT a Leap Year")

Ob man nun wie der M$-Kalender den falschen 29.2.1900 zulässt oder nicht, ist IMHO Geschmackssache.
Wenn man nicht in die Nähe des Jahres 1900 kommt, spielt das überhaupt keine Rolle.

Übrigens: Anlass meines ersten Beitrags war Werners Formel für das Schaltjahr.
Hast du die verstanden? Ich nicht.

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Schaltjahrformel einfacher von: Luschi
Geschrieben am: 05.01.2012 12:26:48

Hallo Erich,

danke Für Deine Aufklärung, bin wohl heute Morgen etwas zu früh aufgestanden. Natürlich hast Du Recht, daß nur die Jahreszahl eine Rolle spielt und nicht das vollständige Datum.
Trotzdem ist es für M$ kein Ruhmesblatt, daß auch in der neuesten Excelversion dieses Anfangsproblem immer noch besteht.

Gruß von Luschi
aus klein-Paris



  

Betrifft: AW: Schaltjahrformel einfacher von: Luschi
Geschrieben am: 05.01.2012 12:41:58

Hallo Erich und an alle anderen Excel-Fan's,

hab mir mal die Mühe gemacht und die Datumsanzeige des Betriebssystems (Windows 7-Ultimate) auf Februar 1900 umgeschalten. Und siehe da, 'Null Problemo' - alles OK - es gibt keinen 29.02.1900.
Als für die Windowseinführung stark geworben wurde, da hieß es: Eine Resourcen-DLL für alle Programme.
Aber MS-Office scheint da die berühmte Ausnahme zu sein - da kocht jeder sein Süppchen.

Gruß von Luschi
aus klein-Paris


  

Betrifft: der 29.02.1900 von: Erich G.
Geschrieben am: 05.01.2012 12:59:23

Hi Luschi,
"die Datumsanzeige des Betriebssystems (Windows 7-Ultimate) auf Februar 1900 umgeschalten"

Ich verstehe absolut nicht, was du da "umgeschaltet" hast.
Wie könnte man eine Datumsanzeige auf Februar 1900 umschalten? Was bedeutet das?

Und wo gibt es dann keinen 29.02.1900 mehr?

Nochmal zum Ausgangspunkt:
Anlass meines ersten Beitrags war Werners Formel für das Schaltjahr. Hast du die verstanden? Ich nicht.

Und noch mal zum 29.2.1900 in M$-Office:
Wenn M$ das jetzt ändern würde - gäbe das nicht ein heftiges Chaos?
Für den heutigen 05.01.2012 steht jetzt als Wert 40913 in der Zelle.
Killt man den 29.02.1900, wird daraus dann der 06.01.2012. Viel Spaß beim Systemwechsel!

(Das hat sich M$ wohl auch schon gedacht, als sie den Fehler von Lotus 1-2-3 übernommen haben.)

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: ich denke mal, er hat ... von: Rudi Maintaire
Geschrieben am: 05.01.2012 13:12:52

Hallo,
... das Systemdatum auf Feb. 1900 geändert.

btw.: Gibt's eigentlich für Samoa eine Spezial-Edition? Da ist ja der 30.12.2011 entfallen.

Gruß
Rudi


  

Betrifft: AW: der 29.02.1900 von: Luschi
Geschrieben am: 05.01.2012 13:22:26

Hallo Erich,

ich habe in der Datumsanzeige der Taskleiste mir das Datum anzeigen lassen und dann solange auf die Bild-Oben-Taste gedrückt, bis die Datumsvorschau für den Februar 1900 angezeigt wurde.
Egal woher das Problem kommt in MS-Office, VB6, wenn die Datumsfunktionen nicht korrekt sind, wie soll man dann zu den anderen Funktionen vollstes Vertrauen haben.
In meiner Firma werden die Daten zwar in eine SQL-DB verwaltet, aber dann auf Excel runtergebrochen und die Auswertungen an den Vorstand sind ppt-Ansichten auf der Grundlage von Excel-Pivot-Tabellen.
Naja, man soll ja den Glauben an M$ nicht verlieren, wer aber altbekannte Probleme nicht löst, ... wo bleibt da die Zukunft (und Lotus-123 und Multiplan dürfen da kein Alibi sein - sonst haben wir nur noch Plagiatoren).
Laut Wikepedia:
Im Jahre 1990 wurde, mit dem Erscheinen der letzten Version 4.2, die Entwicklung von Multiplan eingestellt, da Microsoft schon seit 1987 Excel parallel auf dem Markt etabliert hatte.
siehe: http://de.wikipedia.org/wiki/Microsoft_Multiplan#Geschichte

Gruß von Luschi
aus klein-Paris


  

Betrifft: Glauben und vertrauen von: Erich G.
Geschrieben am: 05.01.2012 16:44:47

Hi Luschi,
das habe ich jetzt so verstandem, dass du im Windows-Kalender nachgesehen hast, ob es da den 29.02.1900 gibt.
Es gibt ihn nicht. (Verstellt hast du das Sysgtemdatum damit ja nicht.) :-)

Du hättest nicht si weit gehen zu brauchen. Schon der Office-Bestandteil VBA weiß, dass es dieses Datum nicht gab.
Probier mal:

Sub aaaaa()
   MsgBox "59: " & Format(59, "dd.mm.yyyy") & vbLf & _
          "60: " & Format(60, "dd.mm.yyyy") & vbLf & _
          "61: " & Format(61, "dd.mm.yyyy") & vbLf & vbLf & _
          "40967: " & Format(40967, "dd.mm.yyyy") & vbLf & _
          "40968: " & Format(40968, "dd.mm.yyyy") & vbLf & _
          "40969: " & Format(40969, "dd.mm.yyyy") & vbLf
End Sub
Noch paar Nebenbemerkungen:
"wie soll man dann zu den anderen Funktionen vollstes Vertrauen haben":
Sollte man nicht.

"man soll ja den Glauben an M$ nicht verlieren":
Ich glaube ja manches, aber M$ und jenes höhere Wesen gehören nicht dazu.

"Auswertungen an den Vorstand":
Selbst Vorstände sind Menschen und müssen mit den Ergebnissen ihrer menschlichen Mitarbeiter
und der von Menschen programmierten Software leben.

"die offzielle Formel zur Erkennung des Schaltjahres von M$":
'Offiziell' ist da überhaupt nichts, auch wenn M$ das vielleicht gern so sehen möchte - per Marktbeherrschung.
Schau mal nach der (alten) Funktion KALENDERWOCHE...

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich