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

Stoppuhr in UF

Stoppuhr in UF
Dirk
Hallo Excelgemeinde,
ich bin am verzweifeln und brauche eure Hilfe.
Ich möchte folgendes in einer Userform realisieren:
In der Userform möchte ich durch betätigen eines CommandButton eine Stoppuhr starten.
Das funzt auch schon ganz gut, aber......
Ich muss die gestoppte Zeit anders darstellen, als man das gewohnt ist und genau das bekomme ich nicht hin! :o(
Die gestoppte Zeit soll dauernd laufen, und sie muss in einer Minute 100 Einheiten zählen und nicht wie gewohnt 60 Einheiten.
Dies ist notwendig, um eine Zeit nach REFA zu ermitteln.
Auch die Aktualisierung muss dann schneller als 1 Sekunde erfolgen, damit jede Einheit auch angezeigt wird.
Und noch eine Frage:
Ist diese Art, wie in meiner Mappe unten, überhaupt genau genug? Da ja die Einheiten schneller zählen, habe ich Angst, das die gestoppte Zeit dann ungenau wird?
Ich hoffe ich habe mich einigermaßen klar ausgedrück!?!?!?
Hier die bisherige Mappe:
https://www.herber.de/bbs/user/64286.xls
Ich hoffe mir kann geholfen werden.
Gruß
Dirk

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Stoppuhr in UF
08.09.2009 20:15:13
Horst
Hi,
bei Application.OnTime ist das kleinste Raster eine Sekunde, genauer gehts mit einem API-Timer.
Dazu gibts Beispiele im Archiv.
mfg Horst
AW: Stoppuhr in UF
08.09.2009 20:18:11
Dirk
Hallo Horst,
danke für deinen Hinweis. Ich finde aber leider kein Beispiel, in dem die gestoppte Zeit in einer Userform dargestellt wird.
Werde noch weiter suchen, ich hoffe ich werde fündig
Gruß
Dirk
AW: über TIMER-Funktion
08.09.2009 20:51:39
Daniel
Hi
ich gehe mal davon aus, daß du nicht mit Excel weiterarbeiten willst, während die Stopuhr läuft.
in diesem Fall kannst du das ganze wesentlich einfacher ohne Application.OnTime gestalten, sondern einfach mit einer Schleife.
über die Funktion DoEvents kannst du auch während dem Schleifenlauf prüfen, ob der Stop-Button gedrückt wurde.
für die Berechnung der Zeit kannst du auch den VBA-Wert Timer verwenden, hier wird die Zeit in Sekunden mit Nachkommastellen hochgezählt, so daß du das einfach in Industrieminuten umrechnenen kannst.
https://www.herber.de/bbs/user/64288.xls
Einziger Nachteil ist, über Mitternacht sollte nicht gestoppt werden, da dann Timer wieder auf 0 gesetzt wird.
Gruß, Daniel
Anzeige
AW: über TIMER-Funktion
08.09.2009 21:05:59
Original
Hi,
...oder alternativ mittels GetTickCount.
mfg Kurt
AW: GetTickCount...
08.09.2009 21:37:27
Daniel
ist jetzt aber keine VBA-Funktion, oder?
zumindest schwiegt sich die Hilfe dazu aus.
könntest du ein Beispiel bringen, wie das funktioniert?
Gruß, Daniel
AW: Beispiel GetTickCount
09.09.2009 09:45:17
Dirk
Hallo Alfons,
danke für deinen Hinweis. Ich habe folgendes in einem anderen Forum dazu gelesen:
"Immer wieder sehe ich Code um GetTickCount oder Aussagen, die sich um den Überlauf von GetTickCount drehen, der alle 49,7 Tage entsteht."
Ich habe nun einen anderen Code in meiner Datei eingebaut. Aber ich habe nun ein anderes Problem.
Im Code bei
lbREFA.Caption = Format((NowMilli() - RefaStart) * 10 / 6, "ss")
hätte ich gerne, dass die sekunden über die 60 einfach immer weiter zählen.
Ändere ich die Zeile in:
lbREFA.Caption = Format((NowMilli() - RefaStart) * 10 / 6, "000.0")
Bleibt der Zähler auf "000.0" stehen.
Kannst du mir helfen?
Hier mein Code:
Option Explicit
Private Declare Sub GetLocalTime Lib _
"kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Function NowMilli() As Double
Dim Jetzt As SYSTEMTIME
GetLocalTime Jetzt
With Jetzt
NowMilli = DateSerial(.wYear, .wMonth, .wDay)
NowMilli = NowMilli + TimeSerial(.wHour, .wMinute, .wSecond)
NowMilli = NowMilli + (1# / (24# * 3600000#)) * .wMilliseconds
End With
End Function
Private Sub ToggleButton1_Click()
If ToggleButton1 Then Call Stoppuhr
End Sub

Private Sub Stoppuhr()
Dim ZeitStart As Double
Dim RefaStart As Double
lbStop.Caption = ""
ZeitStart = NowMilli()
RefaStart = NowMilli()
lbStart.Caption = Format(ZeitStart, "hh:mm:ss")
Do
lbLauf.Caption = Format(NowMilli() - ZeitStart, "hh:mm:ss")
lbREFA.Caption = Format((NowMilli() - RefaStart) * 10 / 6, "ss")
DoEvents
If Not ToggleButton1 Then Exit Do
Loop
lbStop.Caption = Format(NowMilli(), "hh:mm:ss")
End Sub

Gruß
Dirk
Anzeige
AW: Beispiel GetTickCount
09.09.2009 10:27:35
Alfons
Hallo,
sorry, ich verstehe nicht genau was Du willst und setze die
Frage auf offen
Gruß
Alfons
http://vba1.de
AW: Beispiel GetTickCount
09.09.2009 11:03:29
Dirk
Hallo Alfons,
Ich muss die sekunden in Industriesekunden darstellen (100 Sekunden entsprechen 1er Minute).
Ich habe noch etwas rumgebastelt und denke, dass ich nun die Lösung habe.
Ich erhöhe den Differenz-Zeitwert durch *10/6 und rechne durch *86400 den Differenz-Zeitwert in eine reelle Zahl um:
lbREFA.Caption = Format((NowMilli() - RefaStart) * 10 / 6 * 86400, "0000.0")
Gruß
Dirk
AW: über TIMER-Funktion
08.09.2009 21:07:45
Dirk
Hallo Daniel,
vielen Dank für deine Hilfe und die Erklärung. Das sieht spitze aus!!!! :o)
Noch eine Frage:
Im Forum lese ich immer wieder, das es ohne API zu ungenauen Messergebnissen führen kann.
Kannst du mir sagen, wie genau in deinem Beispiel die Uhr läuft?
Auf den ersten Blick sieht es so aus, als würde die Uhr völlig präzise laufen.
Gruß
Dirk
Anzeige
AW: über TIMER-Funktion
08.09.2009 21:46:56
Daniel
Hi
so genau kann ich das auch nicht sagen.
die von Kurt (leider ohne Beispiel) erwähnte Variante wäre ja "GetTickCount" (ist ne API-Funktion)
bei GetTickCount werden die Millisekunden seit Systemstart als Ganzzahl gezählt, bei Timer die Sekunden (mit Nachkommastellen) ab Mitternacht.
dh. du hast bei TIMER immer das Mitternachtsproblem (sollte aber bei normalen Arbeitszeiten nicht wirklich relevant sein).
Da du bei Timer immer mit Komma-Zahlen arbeiten musst, hast du halt die kleinen Ungenauigkeiten, die sich immer durch Umrechnung vom Dual-System (Computerintern) ins Dezimalsystem (für den Anwender) ergeben.
Weitere Auskünfte müsste da vielleicht Kurt geben, der kennt die GetTickCount-Funktion sicherlich besser.
Gruß, Daniel
Anzeige
AW: über TIMER-Funktion
09.09.2009 08:30:53
Dirk
Hallo Daniel,
danke für deine Erklärung. Konnte leider erst jetzt Antworten da ich gestern kurz vor deiner Antwort Dienstschluss hatte und den Rechner ausgemacht habe. Bin gerade wieder aufgestanden.
Ich hoffe Kurt antwortet uns.
Ansonsten werde ich versuchen noch etwas über GetTickCount im Archiv zu finden.
Gruß
Dirk

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige