Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Datumsdifferenz in Monaten per Makro
Mexsalem
Hallo liebe Gemeinde,
ich habe ein Problem eine Datumsdifferenz in Monaten aus der Eingabe eines Datums "Mietbeginn" und dem heutigen Datum korrekt zu verarbeiten.
Es soll eine Prüfung nach Eingabe eines Datums und einer Monatszahl erfolgen. Stimmt die Anzahl der Monate zwischen dem eingegebenen Datum und Heute, soll das bestätigt werden, andernfalls der Hinweis, das die Anzahl der Monate nicht stimmt.
Eine Beispielmappe füge ich bei.
Danke für einen Tipp.
Gruß
Mexsalem
https://www.herber.de/bbs/user/81420.xls
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 20:31:30
Wilfried
Hallo!
Reicht diese Formel?
Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
114.03.201029

ZelleFormel
B1=DATEDIF(A1;HEUTE();"M")
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Gruß
Wilfried
Anzeige
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 20:51:25
Mexsalem
Hallo Hajo, Hallo Wilfried,
danke für Eure Reaktion, aber ich muss wegen der Verwendung einer Userform ein Makro verwenden. Da die Userform dominant programmiert ist, ist Excel im Hintergrund nicht sichtbar. Daher scheidet eurer Vorschlag mittels Formel leider aus.
Das Makro in der Beispieldatei verwendet zwar auch DATEDIFF analog Eurer Formellösung, aber es wird scheinbar keine korrekte Datumsdifferenz in ganzen Monaten ermittelt.
Ich bräuchte also noch einen Hinweis auf die VBA-Lösung.
Gruß Mexsalem
Private Sub txtVertragsalter_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Hell
If txtVertragsalter = "" Then GoTo Hell
If txtMietbeginn = "" Then
txtVertragsalter.Font.Bold = True
End If
If txtVertragsalter = _
-DateDiff("m", Left(Now(), 10), txtMietbeginn) Then
txtVertragsalter.Font.Bold = False
txtStatus = "KORREKT"
Exit Sub
Else
txtStatus = "Vertragsalter weicht vom heutigen Vertragsalter ab."
'Exit Sub
End If
Hell:
End Sub

Anzeige
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 20:58:02
Hajo_Zi
dann benutze die VBA Funktion DATEDIFF()
Gruß Hajo
Das dürfte die vbFkt sein! owT
14.08.2012 21:43:24
Luc:-?
:-?
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 21:58:28
Mexsalem
Hallo nochmal,
genau das ist mein Problem : DATEDIFF.
Wenn ich z.B. den 01.01.2012 beim Mietbeginn eingebe, sind das nach Adam Riese 7 volle Monate zum heutigen Tag (14.08.12).
Die Prüfung, ob auch die Eingabe bei Vertragsalter (7 Monate) korrekt ist, schlägt aber fehl - warum ? Das Makro zeigt IMMER nur die Meldung "Vertragsalter weicht vom heutigen Vertragsalter ab" an.
Die Frage muss daher vorerst offen bleiben.
Gruß Mexsalem
Anzeige
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 22:24:20
Hajo_Zi
das ist nicht offen. VBA zeigt genau 7 an MsgBox DateDiff("m", CDate("01.01.2012"), Date)
Gruß Hajo
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 22:26:55
{Boris}
Hi,
was steht denn exakt in "txtVertragsalter"?
Frag doch erstmal ab (mit Deinem genannten Beispiel), ob da tatsächlich ne 7 drinsteht:
MsgBox txtVertragsalter = "7"
Ergibt das True?
BTW: Statt "Left(Now(), 10)" kannst Du auch einfach "Date" verwenden.
VG, Boris
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 23:47:00
Mexsalem
Hallo Boris, Hallo Hajo,
bei Mietbeginn 01.01.12 und der Eingabe des Vertragsalter mit 7 bekomme ich mit MsgBox txtVertragsalter = "7" bestätigt, dass nur eine 7 in txtVertragsalter drinsteht ("WAHR"). Soweit so gut.
Ich habe den Code mit Date angepasst und Überflüssiges rausgenommen. Er sieht jetzt so aus :
Private Sub txtVertragsalter_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txtVertragsalter = "" Then GoTo Hell
If txtVertragsalter = DateDiff("m", CDate(txtMietbeginn), Date) Then
txtStatus = "KORREKT"
Else
txtStatus = "Vertragsalter weicht vom heutigen Vertragsalter ab."
End If
Hell:
End Sub

Das Grundproblem bleibt bestehen. Der Code verzweigt weiterhin NUR in die ELSE-Anweisung, obwohl txtVertragsalter der Datumsdifferenz entspricht (im genannten Beispiel also 7 Monate). Der Code müsste eigentlich "KORREKT" ausgeben.
Zeigt euch Excel etwa "KORREKT" an ?
Ich krieg die Motten .... oder vernebelt mir ein Gehirnfurz den Verstand ?
Hier die angepasste Beispielmappe : https://www.herber.de/bbs/user/81425.xls
Gruß
Mexsalem
Anzeige
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 23:52:06
Josef

Hallo Mex,
du vergelichst ja auch Äpfel mit Birnen bzw. Text mit einem Numerischen Wert.
If txtVertragsalter = CStr(DateDiff("m", CDate(txtMietbeginn), Date)) Then


« Gruß Sepp »

Anzeige
@ Sepp - kurze Nachfrage
15.08.2012 08:48:45
{Boris}
Hi Sepp,
das hab ich zuerst auch sofort gedacht - aber vor meiner Antwort auf die Schelle mal wie folgt getestet:
MsgBox DateDiff("m", "01.01.2012", Date) = CStr(7)
ergibt True.
Ebenfalls
MsgBox DateDiff("m", "01.01.2012", Date) = "7"
Hingegen
MsgBox TextBox1 = DateDiff("m", "01.01.2012", Date)
ergibt FALSE (wenn in Textbox1 eine 7 steht).
Ist es also ein Unterschied, ob ich mit einer Stringkonstanten vergleiche oder mit dem Inhalt einer TextBox?
Bin gerade ein wenig iritiert...
VG, Boris
AW: @ Sepp - kurze Nachfrage
15.08.2012 17:26:52
Josef

Hallo Boris,
normalerweise kann man schon Interger-/Long-Werte direkt mit Strings vergleichen, bei DateDiff() ist der Rückgabewert allerdings vom Typ Variant/Long und die TextBox gibt Variant/String zurück und deshalb schlägt der Vergleich fehl.

« Gruß Sepp »

Anzeige
Aha...
15.08.2012 17:58:32
{Boris}
Hi Sepp,
...danke für die Antwort. Wieder was gelernt (wenn es auch irgendwie beknackt ist..).
VG, Boris
Nachtrag
15.08.2012 17:29:32
Josef

Hallo nochmal,
es ist eine Eigenheit von VBA das man unterschiedliche Variablen-Typen direkt miteinander vergleichen kann, in fast jeder anderen Programmsprache scheitert ein solcher Vergleich unweigerlich.

« Gruß Sepp »

Anzeige
AW: Datumsdifferenz in Monaten per Makro
14.08.2012 23:52:11
Josef

Hallo Mex,
du vergleichst ja auch Äpfel mit Birnen bzw. Text mit einem Numerischen Wert.
If txtVertragsalter = CStr(DateDiff("m", CDate(txtMietbeginn), Date)) Then


« Gruß Sepp »

Anzeige
AW: Datumsdifferenz in Monaten per Makro
15.08.2012 00:01:48
Mexsalem
Hallo Josef,
ok, das ist ein Argument - aber wie wandel ich den Text in eine Zahl ?
Ein einfaches txtVertragsalter = txtVertragsalter * 1 vor der if-Anweisung funktioniert leider nicht.
Gruß Mexsalem
Hallo? meinen Code probiert? o.T.
15.08.2012 00:04:25
Josef
« Gruß Sepp »

AW: Datumsdifferenz in Monaten per Makro
15.08.2012 00:09:48
Mexsalem
Hallo Josef,
ich muss mich tiefgebückt entschuldigen, ich hab nicht richtig geguckt.
Ich danke dir sehr, jetzt funktioniert´s und ich kann mir die Hirnknoten ausschlafen.
Danke auch an die anderen für Eure Mithilfe.
Gruß
Mexsalem
Anzeige

354 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige