Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
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
Inhaltsverzeichnis

Geb. Einlesen

Geb. Einlesen
08.11.2008 01:12:00
Heiko
Hi
ich hab da noch ein Problem. Ist mir es jetzt aufgefallen. In meinem Kalender stehen am 30.12 da wo die Geb. stehen solten nur nullen. Stimmt da was mit der Formel oder dem VBA Code nicht? Ich komm nicht dahinter. Ich hoffe ihr könnt mir helfen.
Gruß Heiko

Die Datei https://www.herber.de/bbs/user/56619.xls wurde aus Datenschutzgründen gelöscht


17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Geb. Einlesen
08.11.2008 02:42:17
Uwe
Hi Heiko,
hab's repariert:
https://www.herber.de/bbs/user/56620.xls
Das waren übrigens keine Nullen, sonder (),(),... Klammern, und zwar die, die das Alter einklammern sollten. Geändert habe ich in der Funktion das hier:

If strDatum = Day(meSArea(iIndex, 2)) & Month(meSArea(iIndex, 2)) And meSArea(iIndex, 2)  "" Then


habe also noch abgefragt, ob die Variable leer ist. Das Problem war nämlich - und das ist komisch und ich verstehe es nicht wirklich - dass VBA für Day(..) von einem leeren String 30 ausgibt und für Month(..) von einem leeren String 12 ausgibt. Daher war die Bedingung am 30.12 bei jedem leeren Feld erfüllt und es wurde der leere String und die Klammern in die Funktion geschrieben. SEHR SELTSAM.
ICH LASSE DIE FRAGE MAL OFFEN, DENN ICH WÜRDE GERNE WISSEN OB JEMAND EINE ERKLÄRUNG FÜR DIESE VERHALTEN VON DAY UND MONTH HAT, ODER OB DAS EINFACH EIN FEHLER IST?!
Gruß
Uwe
(:o)

Anzeige
AW: Geb. Einlesen
08.11.2008 03:13:00
Heiko
Hi Uwe
Danke für deine hilfe. klappt super.
Gruß Heiko
Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 03:35:32
Uwe
Hi Heiko,
freut mich dass ich Dir helfen konnte. Ich mach die Frage trotzdem wieder auf, weil ich auf eine Erklärung hoffe, siehe meine Antwort oben: Zitat:

Das Problem war nämlich - und das ist komisch und ich verstehe es nicht wirklich - dass VBA fü _
r Day(..) von einem leeren String 30 ausgibt und für Month(..) von einem leeren String 12  _
ausgibt. Daher war die Bedingung am 30.12 bei jedem leeren Feld erfüllt und es wurde der leere  _
String und die Klammern in die Funktion geschrieben. SEHR SELTSAM.
ICH LASSE DIE FRAGE MAL OFFEN, DENN ICH WÜRDE GERNE WISSEN OB JEMAND EINE ERKLÄRUNG FÜR DIESE VERHALTEN VON DAY UND MONTH HAT, ODER OB DAS EINFACH EIN FEHLER IST?!


Gruß
Uwe
(:o)

Anzeige
AW: Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 09:49:32
Tino
Hallo,
habe es jetzt auch mal getestet, in der Hilfe steht z. Bsp.
Syntax
Day(Datum)
Das erforderliche Argument Datum ist ein beliebiger Wert vom Typ Variant,
ein numerischer Ausdruck, ein Zeichenfolgenausdruck oder eine beliebige Kombination,
die ein Datum darstellen kann. Wenn Datum den Wert Null enthält, wird Null zurückgegeben.
Ist wahrscheinlich ein Fehler
Beide Varianten ergeben die gleiche Ausgabe
Dim sAr(1)
Debug.Print Day(sAr(1));
Debug.Print Month(sAr(1));
Debug.Print Year(sAr(1))

Debug.Print Day(0);
Debug.Print Month(0);
Debug.Print Year(0)


Gruß Tino

Anzeige
AW: Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 10:19:04
Reinhard
Moin,
warum soll die Ausgabe nicht gleich sein? Ist doch in beiden Fällen Null.
Mich irritiert viel mehr daß der Tag 1 in Excel der 1.1.1900 ist und in Excel-VBA der 31.12.1899

Sub tt1()
Dim D, Mldg
For D = -2 To 2
Mldg = Mldg & D & " " & Day(D) & "." & Month(D) & "." & Year(D) & "." & Chr(13)
Next D
MsgBox Mldg
End Sub



Tabellenblatt: [Mappe1]!Tabelle1
|  A |    B   |    C   |    D   |
1 | -2 | #ZAHL! | #ZAHL! | #ZAHL! |
2 | -1 | #ZAHL! | #ZAHL! | #ZAHL! |
3 |  0 |      0 |      1 |   1900 |
4 |  1 |      1 |      1 |   1900 |
5 |  2 |      2 |      1 |   1900 |
Benutzte Formeln:
B1:  =TAG(A1)
B2:  =TAG(A2)
B3:  =TAG(A3)
B4:  =TAG(A4)
B5:  =TAG(A5)
C1:  =MONAT(A1)
C2:  =MONAT(A2)
C3:  =MONAT(A3)
C4:  =MONAT(A4)
C5:  =MONAT(A5)
D1:  =JAHR(A1)
D2:  =JAHR(A2)
D3:  =JAHR(A3)
D4:  =JAHR(A4)
D5:  =JAHR(A5)
A1:D5
haben das Zahlenformat: Standard


Gruß
Reinhard

Anzeige
AW: Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 10:37:00
Tino
Hallo,
das beide 0 sind ist klar, wollt damit nur verdeutlichen dass die Hilfe falsch geschrieben ist.
0 ergibt eben nicht 0
Gruß Tino
AW: Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 10:49:00
Reinhard
Hallo Tino,
aha, falsch verstanden.

Sub Test()
MsgBox Day(1)
MsgBox T(1)
End Sub



Function T(Zahl)
T = Day(CStr(Zahl))
End Function


da wird zweimal die 31 angezeigt. Benutzt man aber in Excel die Formel
=T(1) bleibt die Zelle leer.
=T("1") erscheint die 1
Scheinbar ist hier CStr() nutzlos.
Naja, MS, Datümer und ich, uns trennen Welten :-))
Gruß
Reinhard

Anzeige
AW: Day(leerer String)=30; Month(leerer String) =12 ?
08.11.2008 09:51:00
Gerd
Hallo Uwe,
wegen der aktuellen Tabelle der 1.Fußball-Bundesliga :-)
Debug.Print "TSG " & Year((Day(0) & "." & Month(0) & "." & Year(0))) & " Hoffenheim"
Debug.Print (Day(0) & "." & Month(0) & "." & Year(0))
Im Variant wird der Leer-String in Verbindung mit obigen Funktionen in die Integer-Null konvertiert.
Und das 'nullte' Datum ist bei meinem Rechner der
  • 30.12.1899 .
    Gruß Gerd
  • AW: Day(leerer String)=30; Month(leerer String) =12 ?
    08.11.2008 10:05:29
    Tino
    Hallo,
    kann nicht nur in der Verbindung der Funktion liegen.
    Dim i As Integer
    i = 0
    Debug.Print Day(i)
    


    Hier ergibt 0 den Wert 30, laut Hilfe sollte 0 zurückgegeben werden.
    Gruß Tino

    Anzeige
    AW: Day(leerer String)=30; Month(leerer String) =12 ?
    08.11.2008 10:01:00
    Daniel
    Hi
    das ist ganz einfach so:
    ein Datum ist für Excel auch nur eine ganz normale Zahl, wobei ein Tag den Wert 1 hat.
    Heute wäre z.B. 39760, morgen dann 39761 usw.
    das kann man mal ausprobieren, wenn man in Excel ein Datum eingibt und dann das Zahlenformat auf "Standard" umschaltet.
    die Zählung hat auch einen Startpunkt mit 1, der ist
    in Excel der 1.1.1900
    in VBA der 31.12.1899
    warum das unterschiedlich ist, weiß nur der grosse BillyBoy.
    aber daraus wird klar, daß 0 dann dem 30.12.1899 entspricht.
    eine leere Zelle wird in VBA und Excel bei Berechnungen als 0 interpretiert.
    somit dürfte das Verhalten geklärt sein.
    Gruß, Daniel
    Anzeige
    AW: Day(leerer String)=30; Month(leerer String) =12 ?
    08.11.2008 10:17:11
    Tino
    Hallo,
    das ist eine Logische Erklärung, demnach ist die Hilfe in diesem Fall falsch.
    Gruß Tino
    AW: @ Tino
    08.11.2008 11:41:00
    Gerd
    Hallo Tino,
    
    in Verbindung mit den Funktionen
    

    Day, Month, Year .
    Null 0 . In meiner VBA-Hilfe kann ich bei diesen Funktionen keinen Fehler erkennen
    Gruß Gerd

    AW: @ Tino
    08.11.2008 12:12:55
    Tino
    Hallo,
    bei mir in der Hilfe von xl2003 und 2007 steht.
    Zitat:
    
    Syntax
    Day(Datum)
    Das erforderliche Argument Datum ist ein beliebiger Wert vom Typ Variant,
    ein numerischer Ausdruck, ein Zeichenfolgenausdruck oder eine beliebige Kombination,
    die ein Datum darstellen kann. Wenn Datum den Wert Null enthält, wird Null zurückgegeben.
    


    Mir sagt dies eigendlich aus, dass Day(0) eigendlich 0 zurückgeben müsste, es wird aber der Wert 30 zurückgegeben.
    Gruß Tino

    Anzeige
    AW: @ Tino
    08.11.2008 12:32:00
    Daniel
    Hi
    die Zahl 0 ist auch ein real existierender Wert, der Begriff "Null" wird aber in der EDV für eine leere Variable oder einen nicht existierenden Wert verwendet.
    Hier haben die die Verfasser der Hilfe zwar korrekt gearbeitet, aber nicht an den normalen Anwender gedacht, für den "Null" gleich der Zahl 0 ist.
    der Begriff Null wird aber in der Hilfe auch erklärt:
    
    Null
    Ein Wert, der anzeigt, daß eine Variable keine gültigen Daten enthält. Null ist das Ergebnis  _
    einer ausdrücklichen Zuweisung des Wertes Null an eine Variable oder an eine beliebige Operationen zwischen Ausdrücken, die den Wert Null enthalten.
    


    ein ähliches Problem hast du, wenn du vom Anwender eine Ja/Nein abfrage erwartest, und diese in einer Variable speichern wolltest, denn da gäbe es ja auch 3 Varianten: ja, nein und "Entscheidung noch nicht getroffen", was dann der Null entsprechen würde.
    allerdings ist VBA da auch nicht immer konsequent, da bei der Dimensionierung meist schon ein Wert zugewiesen wird (bei Zahlenvariablen 0, bei Stringvariablen der Leerstring, bei Boolschen Variablen False)
    lediglich bei Objekt- und Range-Variablen wird kein Wert automatisch zugewiesen, diese stehen dann auf Null, dh es kann mit ihnen erst gearbeitet werden, wenn per SET ein Wert zugewiesen wurde.
    Gruß, Daniel

    Anzeige
    AW: @ Tino
    08.11.2008 13:23:00
    Uwe
    Hi,
    Danke für diese ausgiebige Diskussion. Mir ist dadurch einiges (eigentlich sogar alles) klar geworden.
    @Daniel:
    Wenn NULL bei dem Wert Null zurückgegeben würde, dürfte aber doch das Ergebnis nicht der 30.12.1899, also das Datum 0 sein, sondern müsste NULL bleiben. Oder?
    Gruß
    Uwe
    (:o)
    AW: @ Tino
    08.11.2008 13:40:00
    Daniel
    Hi
    die Frage ist, ob man der Day-Funktion überhaupt einen echten Null-Wert zum Verarbeiten geben kann?
    wenn man mit einer leeren Zelle rechnen will, wird ja auch automatsich die Null durch die 0 ersetzt.
    Gruß, Daniel
    AW:@Daniel
    08.11.2008 13:23:00
    Tino
    Hallo Daniel,
    also in unserem Fall hier
    0 ist nicht Null
    Leer ist auch nicht Null
    Also können wir in unserem Fall nur auf eine Prüfung verlassen,
    die prüft ob das Datum bzw. die Zelle einen Wert größer 0 hat.
    Gruß Tino

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige