Datum Vergleich

Hallo Experten,

ich programmiere in Excel-VBA 6.0 und habe eine Tabelle, die u.a. Zeitstempel vom Format z.B. „12.01.2008 19:50“ enthält. Normalerweise sollten diese Zeitstempel 30 Minuten auseinanderliegen.

Ein PRG soll testen, ob diese 30 Minuten auch immer eingehalten werden. Dazu lese ich beide Zeitstempel in 2 Variable vom Typ „Date“ ein. Dann addiere ich zum ersten die 30 Minuten und formatiere das Ergebnis sicherheitshalber wieder als Datum.

Trotzdem liefert der Vergleich MANCHMAL fehlerhafte Vergleiche. Wenn ich mir aber beide Werte im Direktüberwachungsfenster anzeigen lasse, dann sind sie exakt gleich.

Da dort die Sekunden nicht angezeigt werden, dachte ich, es würde vielleicht an denen scheitern, aber deren Differenz ist 0.

Die Programmzeile, in der der Vergleich stattfindet, lautet:

If CDate(datDatumA + TimeSerial(0, 30, 0)) = datDatumN Then

Ich hoffe, ihr könnt mir Tips geben.

Vielen Dank
Martin

Hallo Martin,

If CDate(datDatumA + TimeSerial(0, 30, 0)) = datDatumN Then

nimm Dateadd, dann funktioniert das

If DateAdd(„n“ ,30 ,datDatumA) = datDatumN Then

Gruß, Rainer

Leider nein
Hallo Rainer,

danke für die schnelle Antwort. Aber das bringt auch nix.

Aber immerhin habe ich eine neue Funktion kennengelernt.

Viele Grüße
Martin

Hi Martin,

danke für die schnelle Antwort. Aber das bringt auch nix.

was bedeutet ‚bringt nix‘?

Für einen solchen Vergleich würde ich aber die Differenz aus den beiden Werten bilden und die auswerten, dann kann man auch kleine Abweichungen akzeptieren, wenn man mag.

Dim datDatumA As Date, datDatumN As Date

Differenz = DateDiff(„n“, datDatumA, datDatumN)

Eventuell kommst Du ja damit besser zurecht. :smile:

Gruß, Rainer

OT DateDiff in VB und VBA

Dim datDatumA As Date, datDatumN As Date

Differenz = DateDiff(„n“, datDatumA, datDatumN)

Hallo Rainer,

in Excel-Vba hat Datediff die folgende Syntax:

x=datediff(erstesDatum,zweitesdatum,Zeitabschnitt)

wobei dann Zeitabschnitt „y“, „m“ usw. ist, was issn „n“ ?

PS: witzigerweise :frowning: wirds in der Vba-Hilfe falsch erklärt, in der Hilfe steht man soll die deutschen Namen nehmen, also „j“ anstatt „y“, dummerweise weiß davon Datediff nix und verlangt die englischen Kürzel.
Und in Excel selbts gibt es auch diese Funktion, in der Ecelhilfe sehr gut versteckt, nur da heißt sie Datedi f , naja, MS live :smile:

Hast du dich jetzt in der Reihenfolge der Parameter für VB-Datediff geirrt, oder ist die echt anders wie in Excel-Vba?

Gruß
Reinhard

Hallo Reinhard,

in Excel-Vba hat Datediff die folgende Syntax:

x=datediff(erstesDatum,zweitesdatum,Zeitabschnitt)

hmmm. Ich hab’s im Betrieb getestet, mit Excel 2000 VBA. :smile: Das lief so, also tatsächlich das „n“ als erster Parameter.

wobei dann Zeitabschnitt „y“, „m“ usw. ist, was issn „n“ ?

„n“ ist Minute. „m“ ist ja schon Monat, also n für Counter.

PS: witzigerweise :frowning: wirds in der Vba-Hilfe falsch erklärt,
in der Hilfe steht man soll die deutschen Namen nehmen, also
„j“ anstatt „y“, dummerweise weiß davon Datediff nix und
verlangt die englischen Kürzel.

*gg* Macht VB auch so. :smile:

Und in Excel selbts gibt es auch diese Funktion, in der
Ecelhilfe sehr gut versteckt, nur da heißt sie
Datedi f , naja, MS live :smile:

Hast du dich jetzt in der Reihenfolge der Parameter für
VB-Datediff geirrt, oder ist die echt anders wie in Excel-Vba?

Nein, da habe ich mich nicht geirrt, den Code habe ich so in VB6 und VBA getestet. (Excel 2000) Bei Excel würde mich auch nicht wundern, wenn beide Schreibweisen akzeptiert würden. :smile:

Gruß, Rainer

Problem gelöst
Hallo Reinhard,

was mir gerade auffällt.

Wir hatten per Mail weiter gemacht, Excel File gemailt … Problem gelöst. Ein Array war zu klein dimensioniert. Excel hat beim prüfen des Datums einen Fehler gemacht, für den ich auch noch keine Erklärung habe, deshalb hat das Array nicht ausgereicht.

Excels Problem:

Datum1 = ‚10.03.2008 23:40:00‘
Datum2 = ‚11.03.2008 00:10:00‘

Berechne ich mit DateDiff die Differenz, bekomme ich 30 Minuten zurück.

Vergleiche ich aber mit

If Dateadd(‚n‘,30,Datum1) = Datum2 Then …
bekomme ich False statt True, obwohl die Werte gleich sind.

Wir umgehen das Problem jetzt mit der neuen Variable ‚Differenz‘ und verzweigen nach deren Inhalt, das Programm tut, was es soll.

In VB6 funktioniert die Prüfung übrigens …

Private Sub Command1\_Click()
 Dim Datum1 As Date
 Dim Datum2 As Date

 Datum1 = '10.03.2008 23:40:00'
 Datum2 = '11.03.2008 00:10:00'

 MsgBox DateDiff('n', Datum1, Datum2)

 If DateAdd('n', 30, Datum1) = Datum2 Then
 MsgBox 'sind gleich'
 Else
 MsgBox 'sind nicht gleich'
 End If
End Sub

… Die Nachricht: ‚sind gleich‘ wird angezeigt.

Gruß, Rainer

Hallo Reinhard,

in Excel-Vba hat Datediff die folgende Syntax:

x=datediff(erstesDatum,zweitesdatum,Zeitabschnitt)

hmmm. Ich hab’s im Betrieb getestet, mit Excel 2000 VBA. :smile:
Das lief so, also tatsächlich das „n“ als erster Parameter.

Hallo Rainer,

*hmmh* ich glaube ich muß mal Datedif und Datediff mal austesten, ich lese dich, stieß im Inet auf:

Sub DateSpan()
 Dim iVBA As Integer
 iVBA = DateDiff( \_
 interval:="yyyy", \_
 date1:=Range("A1").Value, \_
 date2:=Range("B1").Value)
 With Range("IV1")
 .Formula = "=DateDif(A1,B1,""y"")"
 MsgBox prompt:="Excel: " & .Value & " Jahre"
 .ClearContents
 End With
 MsgBox prompt:="VBA: " & iVBA & " Jahre"
End Sub

was deine Aussage ja bestätigt, daß der Zeitabschnitt als erster Parameter genannt wird.

*grübel* dabei bin ich mir immer noch sicher daß er auch in Vba als dritter Parameter kommt, trotz deiner Aussage und dem geposteten Code.
Bin da sehr zäh nicht umzudenken :smile: und brettsicher ich habe den Zeitabschnitt schon als dritten Parameter in Vba für Datediff benutzt.
Okay bin da schon leicht unsicher geworden, also muß ich das testen…

Gruß
Reinhard