Avatar billede Sonic Mester
20. september 2018 - 03:29 Der er 27 kommentarer og
2 løsninger

Excel timer laver ballade

Hej,

Jeg har en timer der tæller op på mit ark, alt virker med start/stop/reset
men når pc klokken skifter fra 23:59:59 til 00:00:00 skifter timeren til
23:59:59 og begynder at tælle ned af.......

Er der nogle der har en idé om hvorfor den gør dette, og hvordan
det kan fixes (hvis muligt)?

her er vba delen:

Option Explicit

Dim NextTick As Date, t As Date, PreviousTimerValue As Date

Sub StartTime()
PreviousTimerValue = Calculations.Range("A1").Value
t = Time
Call ExcelStopWatch
End Sub
----------------------------------------------------------------------------------------------------------------------------------------
Private Sub ExcelStopWatch()
Calculations.Range("A1").Value = Format(Time - t + PreviousTimerValue, "hh:mm:ss")
NextTick = Now + TimeValue("00:00:01")

Application.OnTime NextTick, "ExcelStopWatch"
End Sub
-----------------------------------------------------------------------------------------------------------------------------------------
Sub StopClock()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
End Sub
----------------------------------------------------------------------------------------------------------------------------------------
Sub Reset()
On Error Resume Next

With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(255, 255, 255)
    End With

Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
Calculations.Range("A1").Value = 0
End Sub
Avatar billede madklub Guru
20. september 2018 - 08:49 #1
Jeg får en fejl med "Calculations",

Men den her virker fint hos mig:
Option Explicit

Dim NextTick As Date, t As Date, PreviousTimerValue As Date
Sub StartTime()
PreviousTimerValue = Range("A1").Value
t = Time
Call ExcelStopWatch
End Sub

Private Sub ExcelStopWatch()
Range("A1").Value = Format(Time - t + PreviousTimerValue, "hh:mm:ss")
NextTick = Now + TimeValue("00:00:01")

Application.OnTime NextTick, "ExcelStopWatch"
End Sub
Avatar billede Sonic Mester
20. september 2018 - 16:45 #2
Hej madklub,

Jeg har forsøgt at ændre følgende i min vba.

Min:PreviousTimerValue = Calculations.Range("A1").Value
Din:PreviousTimerValue = Range("Calculations!A1").Value

Min:Calculations.Range("A1").Value = Format(Time - t + PreviousTimerValue, "hh:mm:ss")
Din:Range("Calculations!A1").Value = Format(Time - t + PreviousTimerValue, "hh:mm:ss")

Mit ark hedder Calculations celle A1 og time boksen er i Ark1

Satte pc tid til 23:59 og startede tiden, da den skiftede til kl 00:00
gik timeren på 23:59:59 og gik så baglens (skulle jo fortsætte med at tælle op)

Nogen idé?
Avatar billede madklub Guru
20. september 2018 - 16:59 #3
Jeg er ingen haj til VBA, men det virker fint i min excel.
Prøv at oprette et helt nyt ark og sær koden ind i det.
Avatar billede Sonic Mester
20. september 2018 - 18:07 #4
Fejlen er der stadigvæk, hmm.

Ny computer, stadigvæk office 365, Excel 2016

Nyt regneark med start/stop/reset og Timebox der viser tid fra CalculationsA1
(Ingen andre Macro/vba eller data i arkene)

Her er vba:

Option Explicit

Dim NextTick As Date, t As Date, PreviousTimerValue As Date

Sub StartTime()
PreviousTimerValue = Range("Calculations!A1").Value
t = Time
Call ExcelStopWatch
End Sub

Private Sub ExcelStopWatch()
Range("Calculations!A1").Value = Format(Time - t + PreviousTimerValue, "hh:mm:ss")
NextTick = Now + TimeValue("00:00:01")

Application.OnTime NextTick, "ExcelStopWatch"
End Sub

Sub StopClock()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
End Sub

Sub Reset()
On Error Resume Next


Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
Range("Calculations!A1").Value = 0
End Sub
Avatar billede Sonic Mester
20. september 2018 - 18:32 #5
Okay, nu har jeg løst "problemet" men forstår ikke lige hvorfor :)
Kan en forklare?

Jeg har ændret nederste linje fra 0 til 1

Application.OnTime earliesttime:=NextTick, procedure:="HsrStopWatch2", schedule:=False
Range("Calculations!A1").Value = 1 (denne var 0)
End Sub

"Nu skifter den ikke ved 00:00:00 og heller ikke kl 1 :)"
Avatar billede Jan Hansen Ekspert
20. september 2018 - 18:46 #6
Nå så er min løsning ikke aktuel men du får den alligevel


Option Explicit

Dim NextTick As Date, t As Date, PreviousTimerValue As Date
Dim ws As Worksheet, rCell As Range

Sub StartTime()
Set ws = Sheets("Calculations")
Set rCell = ws.Range("A1")
PreviousTimerValue = rCell.Value
t = Time
Call ExcelStopWatch
End Sub

Private Sub ExcelStopWatch()
rCell.Value = rCell.Value + TimeValue("00:00:01")
NextTick = Now + TimeValue("00:00:01")

Application.OnTime NextTick, "ExcelStopWatch"
End Sub

Sub StopClock()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
End Sub

Sub Reset()
On Error Resume Next


Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
rCell.Value = 0
End Sub


Jan
Avatar billede Jan Hansen Ekspert
20. september 2018 - 18:51 #7
Lidt tilretning og du har løsningen på https://www.computerworld.dk/eksperten/spm/1025278

Jan
Avatar billede Sonic Mester
20. september 2018 - 19:42 #8
Hej Jan,
Dit forslag virker også (uden den ændring "0til1" som jeg måtte lave på den anden)
Kan du forklare hvad linjen gør, eller hvorfor det virkede med et 1 tal?

Lyder spændende med "lidt tilretning" for løsning af nedtælling :)

Det var faktisk i forbindelse med dette stopur at jeg gerne ville
have visning/nedtælling til vores pause hver 60 min.
men svaret i den anden tråd var at mit ark vil "lægge sig ned"
så "opgav" en løsning.....

Henrik
ps. Hvis op/ned timer kan samles i en, er det nok smart at bruge din løsning :)
Avatar billede Jan Hansen Ekspert
20. september 2018 - 20:32 #9
Hej

fisk, kan ikke forklare


Option Explicit

Dim NextTick As Date, PreviousTimerValue As Date
Dim NextTick2 As Date, PreviousTimerValue2 As Date
Dim ws As Worksheet, rCell As Range, rCell2 As Range

Sub StartTime()
Set ws = Sheets("Calculations")
Set rCell = ws.Range("A1")
PreviousTimerValue = rCell.Value
Call ExcelStopWatch
End Sub

Private Sub ExcelStopWatch()
rCell.Value = rCell.Value + TimeValue("00:00:01")
NextTick = Now + TimeValue("00:00:01")

Application.OnTime NextTick, "ExcelStopWatch"
End Sub

Sub StopClock()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
End Sub

Sub Reset()
On Error Resume Next


Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
rCell.Value = 0
End Sub
'------Nedtælling----------
Sub StartTimedown()
Set ws = Sheets("Calculations")
Set rCell2 = ws.Range("A2") '-----------Cellen den skal tælle ned i
If rCell2 = "" Then rCell2 = TimeValue("01:00:00")
PreviousTimerValue2 = rCell2.Value
Call ExcelStopWatchDown
End Sub

Private Sub ExcelStopWatchDown()
With rCell2
    .Value = .Value - TimeValue("00:00:01")
    If .Value < TimeValue("00:01:00") Then ' maler baggrunden rød det sidste minut
        .Interior.ColorIndex = 3
    Else
        .Interior.ColorIndex = 0
    End If
End With
NextTick = Now + TimeValue("00:00:01")
Application.OnTime NextTick, "ExcelStopWatchDown"
End Sub

Sub StopClockDown()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatchDown", schedule:=False
End Sub

Sub ResetDown()
On Error Resume Next


Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatchDown", schedule:=False
rCell2.Value = TimeValue("01:00:00")
End Sub


evt kunne du køer macro'erne hver 5 eller 10 sekund, så arket ikke lammes så meget.

Jan
Avatar billede Jan Hansen Ekspert
20. september 2018 - 20:55 #10
evt. denne så begge ure kører på samme knapper med auto ny nedtællingstime


Option Explicit

Dim NextTick As Date, PreviousTimerValue As Date
Dim NextTick2 As Date, PreviousTimerValue2 As Date
Dim ws As Worksheet, rCell As Range, rCell2 As Range

Sub StartTime()
Set ws = Sheets("Calculations")
Set rCell = ws.Range("A1")
PreviousTimerValue = rCell.Value

Set rCell2 = ws.Range("A2") '-----------Cellen den skal tælle ned i
If rCell2 = "" Then rCell2 = TimeValue("01:00:00")
PreviousTimerValue2 = rCell2.Value

Call ExcelStopWatch
End Sub

Private Sub ExcelStopWatch()
rCell.Value = rCell.Value + TimeValue("00:00:01")

With rCell2
    .Value = .Value - TimeValue("00:00:01")
    If .Value < TimeValue("00:01:00") Then ' maler baggrunden rød det sidste minut
        .Interior.ColorIndex = 3
    Else
        .Interior.ColorIndex = 0
    End If
    If .Value = TimeValue("00:00:00") Then .Value = TimeValue("01:00:00") ' når timen er udløbet starter den automatisk på en time igen
End With

NextTick = Now + TimeValue("00:00:01")
Application.OnTime NextTick, "ExcelStopWatch"
End Sub

Sub StopClock()
On Error Resume Next
Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
End Sub

Sub Reset()
On Error Resume Next


Application.OnTime earliesttime:=NextTick, procedure:="ExcelStopWatch", schedule:=False
rCell.Value = TimeValue("00:00:00")
rCell2.Value = TimeValue("01:00:00")
End Sub


Jan
Avatar billede Sonic Mester
20. september 2018 - 22:57 #11
Hej Jan,

Den sidste er perfekt til mig (de andre er også ;) )

Jeg har bare testet den på et tomt ark, men vil forsøge at
lægge den ind i mit "rigtige" ark senere eller i morgen.

Krydser fingere for at den ikke bliver overbelastet,
men så må jeg arbejde lidt med den tids macro,
nok på hver 10 sek. og kun på pause uret.

Tak for hjælpen, vender lige tilbage med en update.
Avatar billede Jan Hansen Ekspert
20. september 2018 - 23:08 #12
Hvis du skal det med forskel på pauseuret og det andet ur, skal du nok ud i en combi af de to sidste forslag. Håber du kan læse og forstå koden, så er det nemmere at tilpasse den!!

Jan
Avatar billede Sonic Mester
21. september 2018 - 11:21 #13
Hej Jan,

Det virker i Mit ark og ser ud til at det ikke bliver overbelastet.

Er det muligt at ændre at det er baggrunden der bliver rød, til
at det bliver tallene ?

Henrik
Avatar billede Jan Hansen Ekspert
21. september 2018 - 12:32 #14
udskift .Interior med .Font
Avatar billede Sonic Mester
21. september 2018 - 12:40 #15
Perfekt.

markere lige din løsning som løsningen,
igen tak for hjælpen.

Henrik

ps. hvis du skriver noget i https://www.computerworld.dk/eksperten/spm/1025278
så markere jeg den også.
Avatar billede Sonic Mester
21. september 2018 - 12:59 #16
Kan jeg hente hele indholdet fra cellen Calculations!A2 (Nedtællingsuret) til
mit hovedark (værdi og font) feks i L20

Har i ark 1 celle L20 pt. =Calculations!A2 og den giver jo ikke fonts...
Avatar billede Jan Hansen Ekspert
21. september 2018 - 13:19 #17
ej testet


Option Explicit
'  kodenskal ligge i "Denne_projektmappe"
'----------------------------------------'
    Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range
    Set wsA = Sheets("Hovedarket")
    Set wsB = Sheets("Calculations")

Private Sub Workbook_SheetActivate(ByVal Sh As Object) ' kører hvergang et ark bliver aktiveret, variablen sh fanger hvilket ark der er det aktive
    Set rCellA = wsA.Range("A1") ' A1 i hovedarket
    Set rCellB = wsB.Range("A1") ' A1 i biarket
    rCellA.Font = rCellB.Font ' tager font indstillinger med over fra biark til hovedark
End Sub


Jan
Avatar billede Sonic Mester
22. september 2018 - 01:48 #18
Den kan jeg ikke lige få til at virke.
Har skrevet dette i ThisWorkbook: (Skulle lave en sub da den gik i stå der)

Option Explicit

Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range
__________________________________________________________________
Private Sub Font()

Set wsA = Sheets("Hovedarket")
Set wsB = Sheets("Calculations")

End Sub
___________________________________________________________________

Private Sub Workbook_SheetActive(ByVal Sh As Object)

Set rCellA = wsA.Range("B1")
Set rCellB = wsB.Range("B1") ´-------Nedtælleren er i Calculations B1
rCellA.Font = rCellB.Font

End Sub

For testens skyld har jeg i B1 skrevet denne i hovedarket  =Calculations!B1
Der sker ikke lige noget når B1 i Calculations skifter font.

(I mit hovedark bruger jeg en figur hvor i jeg har uret og kaldt den TimerDown,
der skulle den gerne ende når den virker)
Avatar billede Jan Hansen Ekspert
22. september 2018 - 03:20 #19
ups
prøv denne istedet!!

Option Explicit

Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range


Private Sub Workbook_SheetActive(ByVal Sh As Object)

Set wsA = Sheets("Hovedarket")
Set wsB = Sheets("Calculations")

Set rCellA = wsA.Range("B1")
Set rCellB = wsB.Range("B1") ´-------Nedtælleren er i Calculations B1
rCellA.Font = rCellB.Font

End Sub


Jan
Avatar billede Sonic Mester
24. september 2018 - 00:02 #20
Nej den vil ikke lige skifte.

Skifter fint i Calculations, ikke i Hovedark B1
(Har forsøgt med .font og interior, uden held)

Kan selvfølgelig være mig der er lidt træt....
Avatar billede Jan Hansen Ekspert
24. september 2018 - 01:45 #21
Prøv denne fungerer her

Option Explicit

Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Set wsA = Sheets("Hovedarket")
    Set wsB = Sheets("Calculations")
   
    Set rCellA = wsA.Range("B1")
    Set rCellB = wsB.Range("B1") '-------Nedtælleren er i Calculations B1
    With rCellA.Font
        .Name = rCellB.Font.Name
        .Bold = rCellB.Font.Bold
        .Size = rCellB.Font.Size
        .Color = rCellB.Font.Color
        'osv
    End With
End Sub


Jan
Avatar billede Jan Hansen Ekspert
24. september 2018 - 01:51 #22
Husk marker al koden i gråt felt, tryk CTRL+C, for at sætte koden ind i "Denne_Projektmappe" kodemodul, tryk CTRL+V

Jan
Avatar billede Jan Hansen Ekspert
24. september 2018 - 02:17 #23
denne er måske bedre


Option Explicit

Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Set wsA = Sheets("Hovedarket")
    Set wsB = Sheets("Calculations")
   
    If Sh.Name = wsA.Name Then
        Set rCellA = wsA.Range("B1")
        Set rCellB = wsB.Range("B1") '-------Nedtælleren er i Calculations B1
       
        rCellB.Copy
        rCellA.PasteSpecial xlPasteFormats
        Application.CutCopyMode = False
    End If
End Sub
Avatar billede Sonic Mester
24. september 2018 - 16:04 #24
Denne virker, men jeg skal skifte til ark Calculations og tilbage til Hovedarket,
for at det skifter...

Option Explicit

Dim wsA As Worksheet, wsB As Worksheet, rCellA As Range, rCellB As Range

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Set wsA = Sheets("Hovedarket")
    Set wsB = Sheets("Calculations")
 
    Set rCellA = wsA.Range("B1")
    Set rCellB = wsB.Range("B1") '-------Nedtælleren er i Calculations B1
    With rCellA.Font
        .Name = rCellB.Font.Name
        .Bold = rCellB.Font.Bold
        .Size = rCellB.Font.Size
        .Color = rCellB.Font.Color
        'osv
    End With
End Sub

ps. er det muligt at overfører dette til en "TimeBox" (figur med ur, (feks kaldt TimeDown)
da det er nemmere at flytte rundt på arket?)
Avatar billede Jan Hansen Ekspert
24. september 2018 - 16:27 #25
1. prøv #21
2. formateringen ændres vel ikke uden du har været ovre i Calculations?

ps'en kan jeg ikke svare på!!

Jan
Avatar billede Sonic Mester
24. september 2018 - 17:32 #26
tænkte på om denne kunne bruges....(virker ikke som den er i mit ark og det er baggrunden)

Hvis jeg laver en ny række S3:S44 i Arket Cacculations med feks.
00:00:01, 00:59:00, 01:00:00, 01:59:00 02:00:00 osv.
(op til 59 m. en farve, mellem 59 m. og 1 time anden farve, 1t til 1t 59m. samme farve
som første, 1t 59 m. til 2t samme farve som den anden osv)

en form for tilretning af denne og at timebox er i Hovedarket:

If Calculations.Range("A1").Value > Calculations.Range("S3") And Calculations.Range("A1").Value <= Calculations.Range("S4") Then
    With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(x, x, x)
    End With

If Calculations.Range("A1").Value > Calculations.Range("S4") And Calculations.Range("A1").Value <= Calculations.Range("S5") Then
    With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(x, x, x)
    End With

osv.......

Er det for besværlig/dumt at bruge/lave det på den måde ?

.
Avatar billede Jan Hansen Ekspert
24. september 2018 - 18:14 #27
Hvad med noget alla

Dim ws As Worksheet
Set ws = Sheets("Calculations")
Dim iRest As Integer
iRest = Format(ws.Range("A1").Value, "hh") ' hiver timetal ud
iRest = iRest Mod 2 ' finder resten ved division med 2
Select Case iRest
    Case 0
        With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(x, x, x)
    Case 1
        With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(x, x, x)
End Select

ej testet
Jan
Avatar billede Sonic Mester
25. september 2018 - 00:33 #28
Vil have en macro og er ikke lige sikker på hvor jeg lige sætter den ind.

Tror jeg fortsætter i morgen (senere i dag :) ) er lidt træt nu.
Avatar billede Sonic Mester
25. september 2018 - 13:12 #29
Laver lige en ny tråd for overblikkets skyld :) (og min ;) )
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester