PDA

Vollständige Version anzeigen : Zeit subtrahieren


Frozen_Heaven
30.06.2014, 15:40
Hallo,

ich habe eine Variabel (strTo) welche ein Datum und eine Uhrzeit einliest.
Das funktioniert auch wunderbar.

Nun möchte ich in eine zweite Variable (strTo2) den Wert aus der Variable strTo minus einem Tag speichern.

Sollte in der Variable strTo 201407010000 stehen so soll in der Variable strTo2 201406010000 stehen.

Das ganze habe ich wie folgt versucht, jedoch bekomme ich immer den Fehler "Typen unverträglich". Woran kann das liegen?



Dim strTo as String
Dim strTo2 as String

strTo = Format(WsERF.Cells(intErfRow, intErfColumnStatus + 3), "YYYYMMDD") & _
Left(WsERF.Cells(intErfRow, intErfColumnStatus + 4), 2) & _
Right(WsERF.Cells(intErfRow, intErfColumnStatus + 4), 2)
strTo2 = DateAdd("d", -1, strTo)

Hajo_Zi
30.06.2014, 15:44
warum definierst Du die Variablen nicht als Date?
Dein Wert der Variablen ist kein Datum das ist eine Zahl und diese Zahl kann Excel nicht als Datum interpretierten.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Frozen_Heaven
30.06.2014, 15:49
Da es sich um ein Datum und eine Uhrzeit handelt. Das Format ist YYYYMMDDhhnn.

Mc Santa
30.06.2014, 15:53
Hallo,

Wenn du eine Varibale des Typs Date erstellst, kannst du darin ein Datum inklusive Uhrzeit speichern.
Falls du die Ausgabe später in deinem speziellen Format brauchst, kannst du das wieder hervorrufen, aber innerhalb des Makros, würde ich nur mit der Variable vom Typ Date rechnen.

VG

Hajo_Zi
30.06.2014, 15:54
ja gut, Du möchtest meinen Tipp nicht umsetzen, dann mache es kompliziert. Ich bin raus.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

chris-kaiser
30.06.2014, 15:58
Hi,

'Sollte in der Variable strTo 201407010000 stehen so soll in der Variable strTo2 201406010000 stehen

Sub minius1()
Dim strTo As String
Dim strTo2 As String
strTo = "201407010000"
strTo2 = Format(CDate(Format(Left(strTo, 8), "0000-00-00")) - 1, "YYYYMMDD") & "0000"
Debug.Print strTo2
End Sub

Frozen_Heaven
30.06.2014, 16:02
Vielen Dank! Jetzt funktionierts!

EarlFred
30.06.2014, 16:29
Hallo Name?,

auch wenn das funktionieren mag: Wenn ich sehe, dass Datums- und Zeitangaben als String zum Rechnen verwendet werden sollen, rollen sich mir die Fußnägel hoch. Chris hat die Umrechnung gewohnt elegant gelöst, aber mein Favorit wäre das dennoch nicht.

Hinterlege die Daten im Datumsformat! Die Umwandlung in eine Zeichenkette beliebigen Formats ist dann doch der kleinere Schritt. Als nächstes sollen 4 Stunden und 13 Minuten hinzuaddiert werden, danach die Differenz in Minuten zwischen 2 Zeiten, dann ein Vergleich, welcher Monat größer ist - alles ein Riesenaufwand in "Deinem" Format...

Zudem: Die Aussage:
- minus einem Tag
- Format ist YYYYMMDDhhnn
und
- 201407010000 - 1 Tag = 201406010000
passen für mich nicht zusammen. Der 01.07 minus 1 Tag ist in meinem Kalender der 30.06.!


Mit Datumsformat:
Option Explicit

Sub anders()
Dim d1 As Date, d2 As Date

d1 = DateSerial(2014, 7, 1) + TimeSerial(0, 0, 0)
d2 = d1 - 1

MsgBox Format(d1, "YYYYMMDDhhmm")
MsgBox Format(d2, "YYYYMMDDhhmm")

End Sub

Grüße
EarlFred

chris-kaiser
30.06.2014, 17:02
Hallo EarlFred,

^^
Ich denke mal er hat nur einen String vorliegen.
Wenn wieder die gleiche Ausgabe erfolgen sollte, wäre es egal ob mit den Datentyp Date gearbeitet wird, da Format ohnehin einen Variant(String) zurückgibt.

Du weiß wie ich mit Datumsangaben umgehe. :)
Aber hier würde ich das selber mit String lösen, wenn die Ausgangssituation String ist. Sogar eine Fehlerbehandlung wäre recht einfach.

p.s Natürlich kommt es darauf an was mit diesen Daten weiter passieren sollte...(werden diese noch Ausgewertet, wäre es natürlich besser mit Date zu arbeite und die Daten mit der gew. Zellformtierung zu versehen. (ohne Format arbeiten))

EarlFred
30.06.2014, 17:38
@Chris,

dass DU das kannst ist nichts Neues für mich ;)

Ich weiß aber, was er sonst noch so treibt:
If (strFrom <= strTime) And (strTime < strTo) Then (http://www.ms-office-forum.de/forum/showpost.php?p=1592047&postcount=1)

VBA ist ja gutmütig und verdaut so ziemlich jeden auch noch so (eigentlich) unverdaulichen Fraß. Aber spätestens, wenn das im Vergleich von Zahlenwerten über "irgendwie zusammengebastelte" Strings endet, würde ich langsam anfangen, mir über bessere Lösungen Gedanken zu machen.

Grüße
EarlFred

chris-kaiser
30.06.2014, 18:24
Hi,

:grins: :grins: ups,
diesen Beitrag kannte ich nicht, ich bin die letzten Tage fast nie dazugekommen die Beiträge zu lesen.

Dann natürlich Date, Date und nochmal Date.