Avatar billede Sonic Mester
25. september 2018 - 13:30 Der er 16 kommentarer og
1 løsning

Tekstbox - Skrifttype farve med betingelser

Hej,

Jeg har en lavet en Figur (kaldt den TimeBox) hvor jeg henter tiden
i et andet ark.

HovedArket har figur og Calculations har uret (A1) "Uret er lavet i vba"

Jeg har skrevet i Timebox denne =Calculations!A1
som giver visning af uret.

Jeg kunne godt tænke mig at TimeBox uret skifter font farve ifl. betingelser
jeg har skrevet i arket Calculations.

Feks. hvis jeg i Calculations har: H4 00:09:00 og I4 00:10:00,
H5 00:19:00 og I5 00:20:00 osv til H43 og I43
(dvs. at uret skifter til feks rød i 1 min fra 9-10 min. og 19-20 min. osv)

Kan det lade sig gøre på en eller anden smart måde?

Henrik
Avatar billede Dan Elgaard Ekspert
25. september 2018 - 14:01 #1
VBA - brug 'Worksheet_Change' eventen.
Avatar billede Jan Hansen Ekspert
25. september 2018 - 14:27 #2
Hej
Er der altid mellem det samme minuttal (sidste ciffer)?

så kan du måske lave noget ala

i makroen der styrer "A1":

If Right(Format(Range("A1"), "nn"), 1)=9 then
Avatar billede Jan Hansen Ekspert
25. september 2018 - 14:30 #3
#2 selvfølgelig skal det efterfølges af et

Else

Jan
Avatar billede Sonic Mester
25. september 2018 - 20:25 #4
Uret er som herunder: (Har problemer med at få nedtæller uret til at skifte
farve i Mit hovedArk, (ok i Calculations) men det er ikke så vigtigt lige nu.
Det er at få min TimerBox til at skifte farve mellem 9 og 10 min.

Grunden til valget af en Figur/Timebox er at den kan flyttes rundt så det
passer i mit Ark, det kan jeg ikke med en celle.

"Ja Jan, det kan godt være på samme minut hele vejen, men kun af 1 min. varighed"
-----------------------------------------------------------------------------------------
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("B1") '-----------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 skriften rød det sidste minut
        .Font.ColorIndex = 3
    Else
        .Font.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
Avatar billede Sonic Mester
25. september 2018 - 20:34 #5
Ja, Fandt lige ud af at det ikke er på 9 til alt
Jeg har også på 0

på den ene skal det være 15 min. interval, dvs. på 14-15 min rød
det andet skal der være 20 min. interval dvs. på 19-20 min rød
(de 19-20min. passer jo meget godt med 10 min. intervalg her i spørgsmålet)
Avatar billede Sonic Mester
25. september 2018 - 20:35 #6
Det var derfor jeg tænkte det var nemmer med de 2 (H og I)
hvor jeg bare skriver tiden...
Avatar billede Jan Hansen Ekspert
25. september 2018 - 21:31 #7
Prøv:

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 skriften rød det sidste minut
        .Font.ColorIndex = 3
    Else
        .Font.ColorIndex = 0
    End If
   
[B]' Indsæt nedenstående kode her [/B]           
                           
    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


Dim rArea As Range,rCelle As Range
Set rArea =ws.Range("H3:H43") ' kolonnen med start tidspunkt for rød, 1 min rød
For each rCelle in rArea
      If Format(.Value, "nn")=Format(rCelle.Value,""nn") then
              ' koden til timebox farveændring (rød)
      Else
            ' koden til timebox farveændring (neutral)
    End If
Next

Ej testet

Jan
Avatar billede Jan Hansen Ekspert
25. september 2018 - 21:33 #8
Prøv:

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 skriften rød det sidste minut
        .Font.ColorIndex = 3
    Else
        .Font.ColorIndex = 0
    End If
   

' Indsæt nedenstående kode her
           
                           
    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


Dim rArea As Range,rCelle As Range
Set rArea =ws.Range("H3:H43") ' kolonnen med start tidspunkt for rød, 1 min rød
For each rCelle in rArea
      If Format(.Value, "nn")=Format(rCelle.Value,""nn") then
              ' koden til timebox farveændring (rød)
      Else
            ' koden til timebox farveændring (neutral)
    End If
Next

Ej testet

Jan
Avatar billede Jan Hansen Ekspert
25. september 2018 - 21:36 #9
træls man ikke kan slette et indlæg der ikke ser ud som man gerne vil have det til at se ud!! prøver 3 gang

Prøv:

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 skriften rød det sidste minut
        .Font.ColorIndex = 3
    Else
        .Font.ColorIndex = 0
    End If
   

' Indsæt nedenstående kode her
           
                           
    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


Dim rArea As Range,rCelle As Range
Set rArea =ws.Range("H3:H43") ' kolonnen med start tidspunkt for rød, 1 min rød
For each rCelle in rArea
      If Format(.Value, "nn")=Format(rCelle.Value,""nn") then
              ' koden til timebox farveændring (rød)
      Else
            ' koden til timebox farveændring (neutral)
    End If
Next

Ej testet

Jan
Avatar billede Sonic Mester
25. september 2018 - 23:03 #10
Compile error:
expected: list separator or )

På den sidste nn

If Format(.Value, "nn")=Format(rCelle.Value,""nn") then
                                                                  på denne nn

(ja, jeg ville også gerne kunne slette indlæg ved fejl, mine egne selvfølgelig ;) )
Avatar billede Sonic Mester
25. september 2018 - 23:39 #11
Fjernede det ene " men fik så en anden fejl:

Runtime error 91

Object variable or With blok variablenot set

rCell.Value = rCell.Value + TimeValue("00:00:01") Lyser gul

----------------------------------------------------------------------------------------------
Ser sådan ud nu:

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
   
    Dim rArea As Range, rCelle As Range
Set rArea = ws.Range("H3:H43") ' kolonnen med start tidspunkt for rød, 1 min rød
For Each rCelle In rArea
      If Format(.Value, "nn") = Format(rCelle.Value, "nn") Then
      With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(0, 255, 0) ' koden til timebox farveændring (rød)
      End With
     
      Else
      With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(255, 255, 255) ' koden til timebox farveændring (neutral)
      End With
     
End If
     
     
Next
    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
Avatar billede Jan Hansen Ekspert
26. september 2018 - 00:08 #12
Tjek at h cellerne er formateret hh:mm:ss
kør evt et tjek på indhold i H før If sætningen


If rcell.value="" then exit for

If Format(.Value, "nn") = Format(rCelle.Value, "nn") Then
      With StopWatch.Shapes("TimeBox")
        .Fill.ForeColor.RGB = RGB(0, 255, 0) ' koden til timebox farveændring (rød)
      End With
     
      exit for
     

      Else

Jan
Avatar billede Sonic Mester
26. september 2018 - 00:20 #13
Checker....

Jeg ved at .Fill.ForeColur.RGB er baggrunden, hvad er formlen til font farve
istedet for?
Avatar billede Sonic Mester
26. september 2018 - 00:32 #14
Tester lige.
.Font.Coloue.RGB
Avatar billede Sonic Mester
26. september 2018 - 01:02 #15
Ok, så er det styr på den Font :)
(den skulle bare være i linjen under Fill.ForColur.RGB)

Checker så den nn
Avatar billede Sonic Mester
26. september 2018 - 01:29 #16
Alle H og I ér har formatet 00:00:00 (hh:mm:ss)

Har indsat .......then exit for og exit for uden der sker andet en fejl 91
Avatar billede Jan Hansen Ekspert
26. september 2018 - 14:42 #17
Sådan

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")
Set rCell2 = ws.Range("B1") '-----------Cellen den skal tælle ned i

PreviousTimerValue = rCell.Value
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
    ' maler timebox
    Dim rArea As Range, rCelle As Range, TidA As Date, TidB As Date
    Set rArea = ws.Range("H3:H42") ' kolonnen med start tidspunkt for rød, 1 min rød
    For Each rCelle In rArea
        TidA = Format(rCell.Value, "hh:mm")
        TidB = Format(rCelle.Value, "hh:mm")
        If TidB = TidA Then
            With StopWatch.Shapes("TimeBox")
                .Fill.ForeColor.RGB = RGB(0, 255, 0) ' koden til timebox farveændring
            End With
            Exit For
        Else
            With StopWatch.Shapes("TimeBox")
                .Fill.ForeColor.RGB = RGB(255, 255, 255) ' koden til timebox farveændring
            End With
        End If
    Next
    '-----------------'
    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 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