Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

per Makro Uhrzeit vergleichen

per Makro Uhrzeit vergleichen
05.06.2008 18:48:11
sile1234
Hi,
ich versuche folgendes zu realisieren. Ich hab einen Export aus einem Programm in der in einer Spalte fortlaufend in jeder Zelle die Uhrzeit von 00:00:00 bis 23:45:00 eingetragen ist. Die Sprünge in der Urhzeit sind jeweils 15 Minuten. Teilweise sind diese Sprünge aber unterbrochen, so das z.B. statt
00:30:00
00:45:00
01:00:00
einfach
00:30:00
01:00:00
in den Zellen steht. Ich versuche nun wenn in einer Zelle nicht die erwartete Zeit enthalten ist, eine Zeile einzufügen und die neue Zelle mit der fehlende Zeit zu füllen. Dies klappt auch wunderbar, solange ich unter 01:00:00 bleibe. Prüft er in der Zelle z.B. ob dort 01:15:00 drinsteht und es steht drin, ignoriert er dies und fügt eine neue Zeile mit dem Inhalt 01:15:00 ein.
Jemand ne Idee was an dem Makro diesen Fehler hervorruft?

Sub Uhrzeit()
Dim i As Integer
Dim Zeilenanzahl As Integer
Dim Startzeit As Date
Startzeit = "00:00:00"
Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
For i = 8 To 13
If Cells(i, 3).Value = Startzeit Then
Else
Rows("" & i & ":" & i & "").Select
Selection.Insert Shift:=xlDown
Cells(i, 3).Value = Startzeit
End If
Startzeit = Startzeit + "00:15:00"
Next i
End Sub


7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das dürfte wohl eher mit deiner starren...
05.06.2008 19:48:00
Luc:-?
..."Schleifen"-Parametrierung zu tun haben, Sile,
die bei Zeile8 beginnt und bei Zeile13 endet, egal, wieviele Zeilen zwischenzeitlich eingefügt wurden. Das kannst du auch bei dieser Art von Zyklus nicht berücksichtigen, weil der Zykluskopf nur einmal durchlaufen wird. Also hat weder die zusätzliche Verminderung noch Erhöhung der Laufvariablen irgendeinen Sinn. Du musst einen While...Wend- oder Do While/Until...Loop While/Until (nur 1x While oder Until) nach Do oder Loop) verwenden und dir eine passende Abbruchbedingung ausdenken. Die Do-"Schleife" kannst du auch vorzeitig mit Exit Do verlassen.
Gruß Luc :-?

Anzeige
Zusatzhinweis: Lass dein Makro mal auf...
05.06.2008 19:52:00
Luc:-?
...einem leeren Blatt laufen, da merkst du schnell wie der "Hase läuft"... ;-)
:-?

AW: Das dürfte wohl eher mit deiner starren...
06.06.2008 09:57:00
sile1234
Ich merke gerade das ich den Endparamter der Schleife zu Testzwecken fix gesetzt habe :) Normal läuft die so:
For i = 8 To Zeilenanzahl
Aber ads kann nicht das Problem auslösen was ich habe. Das würde ja nur dafür sorgen das die Schleife evtl zu früh beendet wird und nicht jede Zeile berücksichtigt. Aber das war ja nicht das Fehlerbild was ich habe. Die Prüfung "liest" Zellwerte falsch aus, das ist das Problem. Er prüft eine Zelle auf die Uhrzeit, z.b 01:15:00 und sagt das der Wert dort nicht drinsteht. Dies ist aber nicht richtig, es steht 01:15:00 in der Zelle. Wenn ich mir beide Werte in einer MsgBox anzeigen lasse, dann sieht man es deutlich
MsgBox ("Ist: " & Cells(i, 3).Value & " Soll: " & Startzeit)
Die Box zeigt dann an Ist: 01:15:00 Soll: 01:15:00
Aber er fügt trotzdem eine Zeile ein. Das macht das Makro aber nur, solange die Zeit unter 01:00:00 ist ...
Da ist das Problem was ich habe.

Anzeige
Es ist schon so wie ich geschrieben habe, aber...
07.06.2008 22:10:06
Luc:-?
...dein momentanes Hptproblem, Sile,
basiert auf durch die Addition verursachten Rundungsdifferenzen der Startzeit, wodurch sie genau bei 1/4- und 3/4-Stdd nicht mit der Zellzeit übereinstimmen muss (Periode 3 bzw 6). Deshalb muss gerundet wdn! Da außerdem noch einige Syntaxungereimtheiten in deinem Code vorhanden sind, schlage ich folgende fktnierende Lösung vor...

Sub Uhrzeit()
Dim i As Integer, Zeilenanzahl As Integer, _
Startzeit As Date
Startzeit = "00:00": i = 8
Zeilenanzahl = ActiveSheet.UsedRange.Rows.Count
While i  Startzeit Then
Rows(i).Insert Shift:=xlDown
Cells(i, 3).Value = Startzeit
Zeilenanzahl = Zeilenanzahl + 1
End If
Startzeit = Startzeit + Round(15 / (24 * 60), 6)
i = i + 1
Wend
End Sub


Gruß + schöSo!
Luc :-?

Anzeige
Übrigens kannst du auch...
08.06.2008 23:09:36
Luc:-?
...Startzeit = "00:00": weglassen, Sile,
denn 0 ist ohnehin der Startwert von Startzeit.
Gruß Luc :-?
PS: Übrigens sähe dein Beitrag mit Anrede und Gruß - wie in allen Foren üblich - viel netter aus und könnte so auch mehr Leute zum Antworten animieren. Eine Rückmeldung ist eigentlich genauso üblich...
Warum denken nur so viele, dass ein Lesen der Forumsregeln nicht erforderlich wäre...
:-(

AW: Übrigens kannst du auch...
10.06.2008 11:43:00
sile1234
Hallo Luc,
entschuldige bitte das ich das nicht gemacht habe. Normalerweise bin ich ein Mensch der darauf immer achtet. Ich gebe auch sonst üblicherweise eine Rückmeldung wenn ich eine Lösung bekommen habe.
Das hat übrigends sehr gut funktioniert, auch wenn es komischerweise bei den Sekunden nachher Werte gibt. Die addieren sich langsam um 01 hoch. Aber das spielt keine grosse Rolle.
Vielen Dank für deinen tollen Tip

Anzeige
Bitte sehr; wenn auch spät... ;-) owT
11.06.2008 04:41:36
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige