Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1780to1784
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

Beginn Timer mit Eintragung in Zelle

Beginn Timer mit Eintragung in Zelle
15.09.2020 18:12:52
Markus
Hallo!
Ich habe folgendes Problem:
Ich möchte eine Eingabe in A1 machen und nach dem Betätigen der Enter-Taste soll der Timer (hier 1 Minute) starten. Die Startzeit soll in B1 ausgegeben werden und beginnt dann in Sekundenschritten runter zu laufen.
Über dieses Forum wurde mir ein entsprechendes Makro für das automatische Starten zur Verfügung gestellt.
Hier das Makro:
Code:
Code:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fehler
    Const APPNAME = "Worksheet_Change"
    Dim RNG As Range
    Set RNG = Range("A1")
    If Not Intersect(Target, RNG) Is Nothing Then
        If WorksheetFunction.CountA(RNG) = 0 Then
            Application.EnableEvents = False
            Range("B1").ClearContents
        ElseIf WorksheetFunction.CountA(RNG) = 1 Then
            Application.EnableEvents = False
            Range("B1") = "00:01:00"
            Call nexttick
        End If
    End If
    '*** Fehlerbehandlung
Fehler:
    Application.EnableEvents = True
    If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
        & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub

Das Makro nexttick lautet wie folgt:
Option Explicit
Dim NextInst As Date
Const TimeDiff="00:00:01"
Sub nexttick ()
   On Error GoTo Fehler
   Sheets (1).Range("B1").Value=Sheets (1).Range ("B1").Value-TimeValue (TimeDiff)
NextInst=Now+TimeValue (TimeDiff)
Application.OnTime NextInst, "nexttick"
Fehler:
   If Err.Number 0 Then 
     MsgBox "Zeit abgelaufen"
     Range("B1").Value="00:01:00"
     Range ("A1").Value=""
End If 
End Sub
Nun tritt nei mir jedoch folgendes Problem auf:
Ich mache eine Eintragung in A1. Der Timer  (00:01:00) wird in B1 eingeblendet und beginnt in Sekundenschritten nach unten zu laufen.
Soweit so gut.
Mache ich jedoch eine weitere Eingabe (z.B. in A2) wird für die Zeit der Eingabe, die Zeit (Timer) angehalten.
Erst, wenn ich meine Eingabe mit der Enter-Taste beende, läuft die Zeit wieder weiter.
Was muss anders gemacht werden,  damit die Zeit (Timer), unabhängig von meinen Eingaben, weiter Richtung 0 läuft?
Ich möchte letztendlich herausfinden, wie viele Eingaben in den Zellen (außer A1 -> ist ja meine 1. Eingabezelle) gemacht werden können.
Wenn die Zeit abgelaufen ist, wird ja die Message: "Zeit abgelaufen" eingeblendet. Dann sind keine weiteren Eingaben mehr möglich.
Ich hoffe, mir kann Jemand weiterhelfen. 
Danke

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

Betreff
Datum
Anwender
Anzeige
AW: Beginn Timer mit Eintragung in Zelle
15.09.2020 18:57:36
EtoPHG
Hallo Markus,
Das kann so nicht funktionieren, weil
Während einer Eingabe in eine Zelle können keine Makrocodes ausgeführt werden.
Wenn du die Eingabe z.B. in der Bearbeitungsleiste machst, kann ich dein Makro für eine beliebige Zeit (auch 2 oder 3 Jahre, wenn du deinen Computer nicht abstellst ;-) anhalten.
Du musst einen anderen Weg suchen, z.B. kannst du die Zeit messen indem du die Startzeit mit der jetzigen Zeit vergleichst und falls die Differenz grösser deiner Vorgabe ist, die Sperrung veranlassen. Das mit der Countdown-Anzeige, würde ich verwerfen.
Gruess Hansueli
Anzeige
AW: Beginn Timer mit Eintragung in Zelle
15.09.2020 18:58:05
Nepumuk
Hallo Markus,
das geht nicht, denn sobald sich Excel im Editiermodus befindet kann kein Makro laufen. Da führt kein Weg daran vorbei. Nur wenn du dich entschließt die Zeitanzeige ins Ribbon oder in die Statusleiste dann kann ich dir eine Lösung anbieten.
Gruß
Nepumuk
AW: Beginn Timer mit Eintragung in Zelle
15.09.2020 19:26:34
Markus
An Nepumuk:
Wie würde Dein Vorschlag aussehen?
Nach meinem Prinzip funktioniert aber eine Stoppuhr. Bei der Eingabe in eine Zelle startet eine Stoppuhr und gibt später die Zeit (Dauer) in einer Zelle aus.
Deswegen dachte ich, kann man den Timer (1 Minute) auch irgendwie hinbekommen.
Soll ich mal mein Makro (für Stoppuhr) reinstellen?
Anzeige
AW: Beginn Timer mit Eintragung in Zelle
15.09.2020 19:28:50
Nepumuk
Hallo Markus,
ja, mach das mal.
Gruß
Nepumuk
AW: Beginn Timer mit Eintragung in Zelle
15.09.2020 19:48:14
Markus
Hier der Code für den Tabellenreiter:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fehler
    Const APPNAME = "Worksheet_Change"
    Dim RNG As Range
    Set RNG = Range("A1:A10")
    If Not Intersect(Target, RNG) Is Nothing Then
        If WorksheetFunction.CountA(RNG) = 0 Then
            Application.EnableEvents = False
            Range("B1:C1").ClearContents
        ElseIf WorksheetFunction.CountA(RNG) = 1 Then
            Application.EnableEvents = False
            Range("B1") = Format(Now, "hh:MM:ss")
            Range("C1") = "Start"
        ElseIf WorksheetFunction.CountA(RNG) = RNG.Count Then
            Application.EnableEvents = False
            Range("B1") = Format(Now - Range("B1"), "hh:MM:ss")
            Range("C1") = "Dauer"
        End If
    End If
    '*** Fehlerbehandlung
Fehler:
    Application.EnableEvents = True
    If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
        & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub

Wenn ich nun den ersten Eintrag in den Zellen A1:A10 (eine von den 10 Zellen) mache, startet die Zeit und nach dem 10. Eintrag in den Zellen (A1:A10) wird die benötigte Zeit angezeigt.
Deswegen dachte ich, könnte man das Ganze auch auf einen Timer (1 Minute) umbauen. Nur, dass man den Ablauf der Zeit (also die 1 Minute) auch sehen kann.
Anzeige
AW: Beginn Timer mit Eintragung in Zelle
16.09.2020 14:23:01
Markus
Hallo Nepumuk!
Bei mir kommt beim Ausführen des Makros eine Fehlermeldung!
Fehler beim Kompilieren. Erwartet Sub oder Function.
Markiert wird PtrSafe (Private Declare PtrSafe).
AW: Beginn Timer mit Eintragung in Zelle
16.09.2020 14:33:48
Nepumuk
Hallo Markus,
hast du wirklich Excel 2016?
Gruß
Nepumuk
AW: Beginn Timer mit Eintragung in Zelle
16.09.2020 23:27:39
Markus
Hallo Nepumuk!
Ich habe noch einmal geschaut.
Sorry...habe mich vertan. Habe die Excel-Version 2007.
AW: Beginn Timer mit Eintragung in Zelle
17.09.2020 09:35:56
Nepumuk
Hallo Markus,
teste mal damit:
Option Explicit

Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long) As Long

Private llngTime As Long

Public Sub prcStartTimer()
    llngTime = 10
    Application.StatusBar = " Zeit: " & CStr(llngTime) & " Sekunden"
    Call SetTimer(Application.hwnd, 0, 1000, AddressOf fncTimer)
End Sub

Private Sub prcStopTimer()
    Call KillTimer(Application.hwnd, 0)
End Sub

Private Function fncTimer(ByVal hwnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

    llngTime = llngTime - 1
    Application.StatusBar = " Zeit: " & CStr(llngTime) & " Sekunden"
    If llngTime = 0 Then
        Call prcStopTimer
        Call MsgBox("Zeit abgelaufen", vbInformation, "Information")
        Application.StatusBar = False
    End If
End Function

Gruß
Nepumuk
Anzeige
AW: Beginn Timer mit Eintragung in Zelle
17.09.2020 13:18:30
Markus
Vielen Dank!
Und wo genau füge ich Sub's und Function's ein?
AW: Beginn Timer mit Eintragung in Zelle
17.09.2020 13:36:39
max.kaffl@gmx.de
Hallo Markus,
im Modul1 meiner Testmappe. Das ganze ist nur zur Ansicht gedacht wie es funktioniert, damit der Timer weiterläuft und die MsgBox erscheint obwohl du im Editiermodus bist. Starten kannst du es über dein Makro (Worksheet_Change) im Modul der Tabellen (Call prcStartTimer). Du musst nur die Laufzeit (llngTime = 10 {für 10 Sekunden}) anpassen. Und versuch nicht die Zeit in einer Zelle auszugeben, Excel wird dir sang und klanglos abstürzen.
Gruß
Nepumuk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige