Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

Zeiten kopieren klappt nicht immer!

Zeiten kopieren klappt nicht immer!
15.12.2012 13:57:02
ing.grohn
Hallo Forum,
ich erfasse Zeiten mit einer Routine (von Michael Schwimmer) die mir den Doppelpunkt erspart.
Funktioniert eigentlich ganz gut.
Die Routine wird durch das Worksheet_Change-Ereignis aktiviert.
Kopiere ich die Daten mit eine kleine VBA-Routine in eine zweite Tabelle, kommen die Zeiten nicht immer korrekt über: aus 12:00 wird 00:00, aus 18:00 wird 01:15
Auch bei 06:00 gibts dies Problem.
Hier die Datei:
https://www.herber.de/bbs/user/83018.xls
Bei meinen Versuchen habe ich nun festgestellt, das die o.g. Routine bei 06: und 12: und 18: auch bei der Eingabe nicht korrekt funktioniert.
Kann mir jemand helfen?
Vielen Dank für die Mühe
Mit freundlichen Grüßen
Albrecht

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeiten kopieren klappt nicht immer!
15.12.2012 14:02:41
Hajo_Zi
Hallo Albrecht,
Deinen Fehler bei der Eingabe konnte ich nicht nachvollziehen.

AW: Zeiten kopieren klappt nicht immer!
15.12.2012 14:16:41
ing.grohn
Hallo Hajo,
gib doch bitte in Tabelle 1 Spalte C Zeile 15 18:, oder 12: oder 6: ein.
Die Zeit wird nicht richtig zurückgegeben!
Bei 8:,10:, usw klappt es aber
Mit freundlichen Grüßen
ALbrecht

AW: Zeiten kopieren klappt nicht immer!
15.12.2012 14:19:24
Hajo_Zi
Hallo Albrecht,
im Beitrag Stand das Du Zeit ohne Doppelpunkt eingeben möchtest also habe ich mit 1200 getestet. Deine Eingaben enthalten einen Doppelpunkt.
Gruß Hajo

Anzeige
AW: Zeiten kopieren klappt nicht immer!
15.12.2012 14:26:16
ing.grohn
Hallo Hajo,
stimmt, ich möchte ohne Doppelpunkt eingeben und richtig bei 1200 erscheint 12:00.
werden diese aber Daten kopiert (Button) werden die Zeiten falsch übergeben (schau Tabelle 2)
Dann hab ich getestet: ich kann ganze Stunden mit Doppelpunkt eingeben: 9: ergibt 09:00
aber: bei 18: kommt 01:15 und bei 6: kommt nicht 06:00 sondern 00:25
und genau bei diesen Zellen hab ich auch das Problem beim kopieren: In der Quell-Zelle steht scheints 18:00 drin in der Zielzelle landet 01:15
Mit freundlichen Grüßen
Albrecht

AW: Zeiten kopieren klappt nicht immer!
15.12.2012 16:25:53
Luschi
Hallo Albrecht,
da es auch in Tabelle2 die gleiche 'Worksheet_Change(ByVal Target As Range)'-Prozedur gibt wie in Tabelle1, tritt natürlich auch diese Ereignisroutine in Kraft, wenn in Deiner Kopierroutine in die vordefinierten Tabellenbereiche per VBA etwas reingeschrieben wird. Dadurch passiert Folgendes:
- Kopierroutine schreibt in Zelle
- Ereignisroutine der Tabelle2 stellt fest, das Zelle im Definitionsbereich liegt
- MakeTime wandelt kopierten Zellwert '18:00' um in '01:15'und schreibt ihn so zurück, da diesmal in strHilf diesmal 0,75 statt 1800
Um das zu verhindern, ändere die Kopierroutine so um:

Sub test()
Dim I As Long
Dim K As Long
Dim zHilf(22, 7) As Double
For I = 1 To 22
For K = 1 To 7
zHilf(I, K) = Sheets("Tabelle1").Cells(11 + I, 2 + K).Value
Next K
Next I
Application.EnableEvents = False
For I = 1 To 22
For K = 1 To 7
If zHilf(I, K) > 0 Then
Sheets("Tabelle2").Cells(11 + I, 2 + K).Value = zHilf(I, K)
End If
Sheets("Tabelle2").Cells(11 + I, 2 + K).NumberFormat = "hh:mm"
Next K
Next I
Application.EnableEvents = True
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Zeiten kopieren klappt nicht immer!
15.12.2012 16:44:34
ing.grohn
Hallo nach Klein-Paris
hallo luschi,
klappt prima!!
Vielen Dank!
Ich benötige die Umwandlung der Zahl in "Zeit" in beiden Tabellen. Funktioniert eigentlich auch Problemlos. Der Fehler liegt wohl in Maketime(!!?)
Nur die Zeiten 6:00, 12:00, 18:00 (wahrscheinlich auch 24:00) tun nicht richtig
Aber so kann ich damit leben.
schönes Wochenende
Mit freundlichen Grüßen
Albrecht

Warum machst du das so umständlich, ...
15.12.2012 16:46:11
Luc:-?
…Albrecht;
erst Set raBereich = Range("C11:Z33, C35:Z57, C59:Z81, C83:Z105, C107:Z129, C131:Z153") und dann Set raBereich = Intersect(raBereich, Range(Target.Address))?
Target repräsentiert in dieser EventProc immer die Zelle, in der die Änderung erfolgt, und zwar als Range-Objekt!
Private Sub Worksheet_Change(ByVal Target As Range)
Const adRelBer$ = "C11:Z33, C35:Z57, C59:Z81, C83:Z105, C107:Z129, C131:Z153"
Dim relBereich As Range
Set relBereich = Range(adRelBer)
If Not Intersect(Target, relBereich) Is Nothing Then MakeTime Target
Set relBereich = Nothing
End Sub
So dürfte es auch von M.Schwimmer gemeint gewesen sein → Einstellung des richtigen (Zeit-)Formats sofort bei Eingabe, denn darum geht's ja wohl schließlich! Da im Nachhinein etwas korrigieren zu wollen, dürfte nicht im Sinne des Erfinders sein. Dazu würdest du auch kein Ereignis benötigen, denn das wäre etwas Anderes. Folglich hast du dir selbst das berühmte Bein gestellt. ;-]
Ich hatte so etwas auch mal entwickelt, allerdings für einen ganz spezifischen Zweck, wobei nicht die Zeit, sondern der Tag des jeweiligen Monats angegeben wird, um zu einem echten Datum vervollständigt zu wdn.
Ansonsten gibt's ja noch die Möglichkeit, das über die Zehnertastatur zu machen (mit Komma statt Doppelpkt). Dazu findest du sicher etliches im Archiv, denn wir hatten das Thema schon mal diskutiert.
Außerdem ist es immer nützlich, auch mal HWHs Angebot auf den Forumsseiten zu studieren. Viell ist da auch etwas dabei.
Gruß + schöDrAdWE, Luc :-?

Anzeige
AW: Warum machst du das so umständlich, ...
15.12.2012 17:06:05
ing.grohn
Hallo Luc,
muß ich drüber nachdenken und probieren.
Antwort folgt!
Schönes Wochenende
Mit freundlichen Grüßen
Albrecht

AW: Warum mst du das so umstch, Nachtrag ...
15.12.2012 17:27:54
ing.grohn
Hallo Luc,
eigenartigerweise benimmt sich die Schwimmer-Routine bei 6, 12, 18 und 24 Uhr seltsam, wenn man die Zeiten mit Doppelpunkt eingibt
MfG
Albrecht

Muss ich mal testen, ...
15.12.2012 19:00:01
Luc:-?
…Albrecht,
viell hat er ja etwas übersehen, was ich bei meinen eigenen Entwicklungen nicht übersehen hatte, denn die xlVersion wird's ja wohl kaum sein. Evtl hängt das auch mit der Zellformatierung zusammen (ggf wird Standard oder im Ggteil Zeit verlangt). Dann gibt's da noch so Einstellungen wie am/pm für 12h-Uhrzeiten, aber das wird's wohl eher nicht sein bei diesen Vielfachen von 6, oder…?!
Jedenfalls, steht die Uhrzeit erstmal richtig da, sollte sie auch problemlos (mit der korrigierten Proz Test) kopiert wdn können.
Luc :-?

Anzeige
AW: Muss ich mal testen, ...
16.12.2012 11:03:27
ing.grohn
Hallo Luc,
das Test-Makro funktiniert nun problemlos
(hät ich auch selbst drauf kommen mit App.EnableEvents, na ja)
Aber sonst wär ich ja auch nicht auf die Eigenarten bei 6,12,18,24 gekommen,
die hängen ja scheints irgendwie zusammen.
Bin gespannt auf deine Antwort
schönen Sonntag
Albrecht

AW: Zeiten kopieren klappt doch! ABER:
17.12.2012 12:09:56
ing.grohn
Hallo Forum,
ich hab den Knackpunkt gefunden:
1. EnableEvants (na,ja)
2. Umwandlung in Gleitkommazahl!!!
Kurz und gut: Bei 6:, 12, 18, und 24: kommen "Gleitkommazahlen" mit Max 2 Nachkommastellen raus.
Diese werden durch
strHilf = String(4 - Len(strHilf), Asc("0")) & strHilf

"normal" weiter verarbeitet und liefern die "Uberraschungs"-Ergebnisse.
Alle anderen Zeiten liefern Gleitkommazahlen mit vielen Nachkommastellen. Obige Zeile stolpert dann darüber und ab gehts in die Fehlerbehandlung (ES PASSIERT NICHTS)
Fazit: das es meistens funktioniert hat, war reiner Zufall!!
Ich wünsche einen schönen Tag
Mit freundlichen Grüßen
Albrecht

Anzeige
Du hast noch mehr entdeckt, ...
20.12.2012 21:19:35
Luc:-?
…Albrecht,
als du versucht hast den Schwimmer ins „Schwimmen“ zu bringen, indem du den Doppelpkt, dessen Eingabe diese Routine ja vermeiden soll, doch eingegeben hast. ;-)
Die Zeile strHilf = String(4 - Len(strHilf), Asc("0")) & strHilf im Schwimmer-Pgm ist Blödsinn, denn String(4 - Len(strHilf), Asc("0")) liefert immer "0" weil die vbFkt String falsch angewendet wird → Arg1 ist die Anzahl der Wiederholungen von Arg2, aber Arg2 muss ein einzelnes Zeichen sein; Asc("0") liefert aber kein Zeichen, sondern den ASCII-Code von "0", also 48! So einen trivialen Fehler sollte man einem Sachbuchautor zwar nicht zutrauen (oder hast du das etwa verschlimmbessert?!), aber, wenn man berücksichtigt, dass so einer mit Vielschreiberei (und dem dadurch erworbenen Bekanntheitsgrad) Geld verdient, ist doch eigentl schon alles klar! So ein Pgmmchen ist doch nur Zugabe und erhebt keinen Anspruch auf universelle Fktionalität!
Wer viel schreibt, hat idR nicht so viel Zeit, auch noch viel zu testen! Allerdings würde ich so etwas nicht in ein Buch geschweige denn auf meine Homepage setzen. Aber auf letzteren kann man ja wirklich nicht nur haufenweise Trivialitäten finden, sondern auch etlichen Unsinn lesen — brauche da nur an die Site eines Chemie/Office-Coaches zu denken, der kaufmännisches mit wissenschaftl-technischem Runden verwechselt; oder die Site einer Wiener IT- und Office-Schulungsfirma, die in ihren Materialien beweist, dass sie wenig Ahnung von For Each-Zyklen hat. Diese Leute müssen Geld verdienen — sie können (und wollen) sich nicht auch noch mit Forschung befassen!
Gruß & schöVierAdWE, Luc :-?

Anzeige
Außerdem zeugt es von ...
20.12.2012 21:45:19
...
…Unkenntnis des Sinns der Ungarischen Notation, wenn eine Variable strHilf als Variant deklariert wird. Die Deklaration ist zwar iO, aber nicht der Name, denn in der VulgärUN wird unter dem Namenspräfix str eine String-Variable verstanden, was sie aber definitiv nicht ist. Ich hätte die eher tmZeit (tm für temporär nach Art ihrer Verwendung) o.ä.(zB hiZeit oder vulgär vaZeit) genannt!
Luc :-?

Nachtrag: Fktt nur b.1gabe v.600! owT
21.12.2012 00:12:15
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige