Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Beginn Timer mit Eintragung in Zelle

Betrifft: Beginn Timer mit Eintragung in Zelle von: Markus Lehmann
Geschrieben am: 15.09.2020 18:12:52

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

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: EtoPHG
Geschrieben am: 15.09.2020 18:57:36

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

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Nepumuk
Geschrieben am: 15.09.2020 18:58:05

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

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Markus Lehmann
Geschrieben am: 15.09.2020 19:26:34

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?

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Nepumuk
Geschrieben am: 15.09.2020 19:28:50

Hallo Markus,

ja, mach das mal.

Gruß
Nepumuk

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Markus Lehmann
Geschrieben am: 15.09.2020 19:48:14

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.

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Nepumuk
Geschrieben am: 16.09.2020 09:37:10

Hallo Markus,

der Countdown wird in der Statusleiste angezeigt.

https://www.herber.de/bbs/user/140257.xlsm

Gruß
Nepumuk

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Markus Lehmann
Geschrieben am: 16.09.2020 14:23:01

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).

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Nepumuk
Geschrieben am: 16.09.2020 14:33:48

Hallo Markus,

hast du wirklich Excel 2016?

Gruß
Nepumuk

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Markus Lehmann
Geschrieben am: 16.09.2020 23:27:39

Hallo Nepumuk!



Ich habe noch einmal geschaut.



Sorry...habe mich vertan. Habe die Excel-Version 2007.

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Nepumuk
Geschrieben am: 17.09.2020 09:35:56

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

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: Markus Lehmann
Geschrieben am: 17.09.2020 13:18:30

Vielen Dank!

Und wo genau füge ich Sub's und Function's ein??

Betrifft: AW: Beginn Timer mit Eintragung in Zelle
von: max.kaffl@gmx.de
Geschrieben am: 17.09.2020 13:36:39

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

Beiträge aus dem Excel-Forum zum Thema "Beginn Timer mit Eintragung in Zelle"