• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

TimeValue in VBA

Status
Niet open voor verdere reacties.

cor.de.kruijf

Gebruiker
Lid geworden
5 mrt 2001
Berichten
233
Heeft iemand een idee waarom onderstaande code niet werkt?
Het is een stukje code uit een groter geheel om Q4 rood te kleuren wanneer hierin "R" staat en de tijd in O5 na middernacht is.

Code:
Range("Q4").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ALS(EN(Q4=""R"";O5>TimeValue("00:00:00"));1;0)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
 
Laatst bewerkt door een moderator:
O5 is altijd na middernacht omdat middernacht 00:00:00 de kleinst mogelijke tijdwaarde is.
 
middernacht?

O5 is altijd na middernacht omdat middernacht 00:00:00 de kleinst mogelijke tijdwaarde is.

in O5 staat een wisselende tijdwaarde, wanneer die na middernacht is EN Q4 een R bevat, dan alleen moet Q4 rood kleuren.
Je hebt wel gelijk dat 00:00 altijd na middernacht is maar ................. het kwartje begint te vallen geloof ik.

Range("Q4").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ALS(EN(Q4=""R"";P7=""N"";O5>TimeValue("00:00:00"));1;0)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With

ik heb een voorwaarde toegevoegd, P7 bevat een "N' indien het tijdstip tussen 00:00 en 04:00 valt.
maar het werkt nog steeds niet
 
Laatst bewerkt:
Cor,

Waarom plaats je met VBA code een voorwaardelijke opmaak in een vaste cel?

Dit kun je toch beter handmatig instellen en dan is het toch goed.
 
Laatst bewerkt:
geen vaste cel

Cor,

Waarom plaats je met VBA code een vorrwaardelijke opmaak in een vaste cel?

Dit kun je toch beter handmatig instellen en dan is het toch goed.

deze opmaak moet gelden voor meerdere cellen waarvan vantevoren niet vast staat hoeveel dit er zijn.
daarnaast gaat handmatig ingestelde voorwaardelijke opmaak nog wel eens verloren, bv wanneer excel vastloopt.
 
Waarom plaats je dan toch een voorwaardelijke opmaak in een cel als jij het idee hebt dat dit verloren kan gaan. Waar ik overigens nog nooit van gehoord heb maar dat terzijde.
Waarom laat je de VBA code de cel niet rood kleuren?
 
uitleg

:cool:
Waarom plaats je dan toch een voorwaardelijke opmaak in een cel als jij het idee hebt dat dit verloren kan gaan. Waar ik overigens nog nooit van gehoord heb maar dat terzijde.
Waarom laat je de VBA code de cel niet rood kleuren?

ik doe het juist met vba omdat het dan niet verloren kan gaan, en het maakt deel uit van een fout controle.
wanneer excel (eigenlijk het werkblad) vastloopt en je opent het weer vraagt excel of je het door excel veilig gestelde bestand wilt openen. Als je dat doet is alle voorwaardelijke opmaak weg, er werken ook anderen met het bestand nl.
 
Cor,

Als het dan zo trikkie is als jij beschrijft dan kun je toch beter VBA de cel rood laten kleuren ipv een voorwaardelijke opmaak plaatsen die verloren kan gaan.

Wat ik bedoel is:
Code:
ActiveSheet.[A1].Interior.Colorindex = 3
 
Beste Superzeeuw

Cor,

Als het dan zo trikkie is als jij beschrijft dan kun je toch beter VBA de cel rood laten kleuren ipv een voorwaardelijke opmaak plaatsen die verloren kan gaan.

Wat ik bedoel is:
Code:
ActiveSheet.[A1].Interior.Colorindex = 3

dan issie toch niet meer voorwaardelijk?
al zoekende ontdek ik dat het steeds moeilijker wordt omdat ik het probleem waarschijnlijk niet op de juiste manier benader.
De voorwaarde in P4 moet vervallen, het moet alleen gelden als het tijdstip in O5 tussen 00:00 en 02:00 valt. nog moeilijker dus.
het wordt dan iets van:

Range("Q4").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ALS(EN(Q4=""R"";O5>TimeValue( :shocked: ));1;0)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With

en bij :shocked: zou dan dus de voorwaarde (tussen 00:00 en 02:00) moeten staan.
 
Laatst bewerkt:
Nee, dan issie niet meer voorwaardelijk maar is dat een bezwaar.

Als jij toch met regelmaat de voorwaardelijke opmaak terugzet kun je net zo goed VBA het werk op laten knappen en die voorwaardelijke opmaak vergeten.
 
terugzetten?

Nee, dan issie niet meer voorwaardelijk maar is dat een bezwaar.

Als jij toch met regelmaat de voorwaardelijke opmaak terugzet kun je net zo goed VBA het werk op laten knappen en die voorwaardelijke opmaak vergeten.

met alle respect superzeeuw, denk ik dat we off topic raken. de vraag is waarom mijn code niet werkt,niet waarom ik het wil toepassen.
het gaat om een groot werkblad met veel controle regels in vba.
deze is er 1 van, en hij werkt, behalve met de tijdwaarde. en dat wil ik juist. :rolleyes:
 
* dubbele aantal dubbele aanhalingstekens rond "00:00:00" ofwel had je daar gewoon 0 mogen zetten
* afhankelijk van je taalinstelling is het tijdwaarde ipv timevalue
* nu voeg je altijd formatconditions toe en die zullen bij excel2007 wel meer dan 3 doch ook wel ergens eindig zijn
Code:
   With Range("Q4")
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=EN(Q4=""R"";P7=""N"";O5>Tijdwaarde(""00:00:00""))"
    .FormatConditions(.FormatConditions.Count).SetFirstPriority
    With .FormatConditions(1).Interior
      .PatternColorIndex = xlAutomatic
      .Color = 255
      .TintAndShade = 0
    End With
  End With
 
Laatst bewerkt:
Allereerst deel ik Superzeeuws mening, je kunt VBA ook (voorwaardelijk) de cel laten kleuren als een van de cellen Q4 P7 O5 wijzigt, maar goed.

Cow18's oplossing lijkt me zoals altijd prima,

Ik heb enkel wat $-tekens toegevoegd en (voor mij) de niet in xl2003 werkende regels even weggevinkt

Code:
 With Range("Q4")
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=EN($Q$4=""R"";$P$7=""N"";$O$5>Tijdwaarde(""00:00:00""))"
    '.FormatConditions (.FormatConditions.Count).SetFirstPriority
    With .FormatConditions(1).Interior
      .PatternColorIndex = xlAutomatic
      .Color = 255
     ' .TintAndShade = 0
    End With
  End With
 
GEWELDIG!!!!
Bedankt Eric, dat was de oplossing.

With Range("Q4")
'.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=EN($Q$4=""R"";$O$5>Tijdwaarde(""00:00:00"");$O$5<Tijdwaarde(""02:00:00""))"
.FormatConditions(.FormatConditions.Count).SetFirstPriority
With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
End With

Ik heb hem nog iets aangepast om de tijd tussen 00:00uur en 02:00uur te laten triggeren.
Het geheim zat in $
De oude opmaak (FormatConditions.Delete) verwijderen mag niet omdat er zonder de trigger andere condities gelden.

Opgelost, nogmaals dank. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan