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

Voorwaardelijke opmaak macro update niet.

Status
Niet open voor verdere reacties.

Ad Fundum

Gebruiker
Lid geworden
2 mei 2008
Berichten
185
Hallo,

Ik heb een macro gemaakt die, afhankelijk van de waarde van de cellen, de cellen een kleurtje geeft.

Het probleem is dat de waarde van die cellen bepaald wordt door een formule, die eender wanneer kan veranderen. En omdat de waarde van de cellen automatisch veranderd, en niet manueel, wordt mijn macro niet uitgevoerd.

Weet iemand hoe ik mijn macro op deze wijze wel automatisch uitgevoerd kan laten worden?

Alvast bedankt voor uw tijd!
~ Ad fundum

Mijn Macro:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   
   For Each Target In Range("Q28:Z206")
       With Target
    
        Select Case .Value
         Case -2
              .Interior.ColorIndex = 4
              .Font.ColorIndex = 4
         Case 2
              .Interior.ColorIndex = 3
              .Font.ColorIndex = 3
         Case 98
              .Interior.ColorIndex = 44
              .Font.ColorIndex = 44
         Case 99
              .Interior.ColorIndex = 14
              .Font.ColorIndex = 14
         Case 0
              .Interior.ColorIndex = 20
              .Font.ColorIndex = 20
         Case 1
              .Interior.ColorIndex = 8
              .Font.ColorIndex = 8
        End Select
    
       End With
   Next

  End Sub
 
Beste Ad Fundum ;)

Heb je de macro geplaatst in Sheet1 ipv in ThisWorkbook ?

GRoetjes Danny. :thumb:
 
Aan het bovenste stuk in de code te zien, denk ik niet dat jij begrijpt wat Target is.
 
Beste Ad Fundum ;)

Heb je de macro geplaatst in Sheet1 ipv in ThisWorkbook ?

GRoetjes Danny. :thumb:

Ja, hij staat in de juiste Sheet.

Ik heb al op internet opgezocht dat het komt doordat de cellen een formule bevatten die de waarde aanpast, ipv dat de gebruiker de waarde van de cellen manueel aanpast. Alleen weet ik dus niet hoe ik de macro kan laten werken als deze waarde ook automatisch wordt aangepast.

Bedankt voor je antwoord!
 
Beste Ad Fundum ;)

Hier een voorbeeld.

Code:
Sub Inkleuren()
    Application.ScreenUpdating = False
    'http://www.mvps.org/dmcritchie/excel/colors.htm'
    Dim cell_in_loop As Range
    For Each cell_in_loop In Range("A1:Z1")
        With cell_in_loop
            Select Case .Value
                Case "D": .Interior.ColorIndex = 2
                Case "CV": .Interior.ColorIndex = 48
                Case "P2": .Interior.ColorIndex = 3
                Case "P1": .Interior.ColorIndex = 4
                Case "P3": .Interior.ColorIndex = 5
                Case "R": .Interior.ColorIndex = 44
            End Select
        End With
    Next
    Application.ScreenUpdating = True
End Sub

Nog wat aanpassen en je bent er.

Groetjes Danny. :thumb:
 
Hartelijk dank voor dit, ik zal het dadelijk proberen!

Moet ik dit ook in Sheet1 plakken, of in ThisWorkbook?

EDIT: Ik heb beide geprobeerd, maar het wil niet werken, ook niet als ik het manueel aanpas :/

Sub Inkleuren()
Application.ScreenUpdating = False
Dim cell_in_loop As Range
For Each cell_in_loop In Range("Q28:Z206")
With cell_in_loop
Select Case .Value
Case -2: .Interior.ColorIndex = 4
Case 2: .Interior.ColorIndex = 3
Case 98: .Interior.ColorIndex = 44
Case 99: .Interior.ColorIndex = 14
Case 0: .Interior.ColorIndex = 20
Case 1: .Interior.ColorIndex = 8
End Select
End With
Next
Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Zet alle getallen in de case tussen " "
Code:
Sub Inkleuren()
Application.ScreenUpdating = False
Dim cell_in_loop As Range
For Each cell_in_loop In Range("A28:B206")
With cell_in_loop
Select Case .Value
Case "-2": .Interior.ColorIndex = 4
Case "2": .Interior.ColorIndex = 3
Case "98": .Interior.ColorIndex = 44
Case "99": .Interior.ColorIndex = 14
Case "0": .Interior.ColorIndex = 20
Case "1": .Interior.ColorIndex = 8
End Select
End With
Next
Application.ScreenUpdating = True
End Sub
 
Zet alle getallen in de case tussen " "
Code:
Sub Inkleuren()
Application.ScreenUpdating = False
Dim cell_in_loop As Range
For Each cell_in_loop In Range("A28:B206")
With cell_in_loop
Select Case .Value
Case "-2": .Interior.ColorIndex = 4
Case "2": .Interior.ColorIndex = 3
Case "98": .Interior.ColorIndex = 44
Case "99": .Interior.ColorIndex = 14
Case "0": .Interior.ColorIndex = 20
Case "1": .Interior.ColorIndex = 8
End Select
End With
Next
Application.ScreenUpdating = True
End Sub

Haalt niets uit :(
 
Beste Ad Fundum ;)

De code van mij moet je in een module plaatsen en oproepen via een knop of via macro's uitvoeren

OF

Je zet voor de code dit

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Groetjes Danny. :thumb:
 
Maar moet het een Worksheet_Change event zijn?

Van mij mag het evengoed iets anders zijn wat dezelfde functionaliteit heeft :)

EDIT: Ik zal het dadelijk proberen Danny, bedankt :)
 
Ik heb de code nu aangepast tot dit:

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    'http://www.mvps.org/dmcritchie/excel/colors.htm'
    Dim cell_in_loop As Range
    For Each cell_in_loop In Range("Q28:Z206")
        With cell_in_loop
            Select Case .Value
                Case "-2": .Interior.ColorIndex = 4
                Case "2": .Interior.ColorIndex = 3
                Case "98": .Interior.ColorIndex = 44
                Case "99": .Interior.ColorIndex = 14
                Case "0": .Interior.ColorIndex = 20
                Case "1": .Interior.ColorIndex = 8
            End Select
        End With
    Next
    Application.ScreenUpdating = True
End Sub

Maar dan bekom ik hetzelfde effect als bij de code die ik het; de kleur wordt slechts aangepast nadat ik manueel iets aan de cellen verander :confused:
 
Ik heb de code nu aangepast tot dit:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
...
End Sub

Maar dan bekom ik hetzelfde effect als bij de code die ik het; de kleur wordt slechts aangepast nadat ik manueel iets aan de cellen verander :confused:

Dit zou toch moeten werken, aangezien je 1 voor 1 alle cellen afloopt en checkt.

Je moet wel de consequenties van deze code begrijpen: elke keer dat jij 1 cel aanpast, een kolombreedte aanpast, ... worden een kleine 1800 cellen gecheckt... :( En dat is ook niet om vrolijk van te worden denk ik.

Wigi
 
Laatst bewerkt:
Dit zou toch moeten werken, aangezien je 1 voor 1 alle cellen afloopt en checkt.

Je moet wel de consequenties van deze code begrijpen: elke keer dat jij 1 cel aanpast, een kolombreedte aanpast, ... worden een kleine 1800 cellen gecheckt... :( En dat is ook niet om vrolijk van te worden denk ik.

Wigi

Oh, maar het proces verloopt redelijk snel ^^ Maar je hebt het probleem al vermeld in je post: "elke keer dat jij 1 cel aanpast, een kolombreedte aanpast, ..."

Het probleem is dus dat ik niets aanpas, de formule zorgt daarvoor.
 
=ALS($AA28>=Q$27;AC28;$AR28)

Waarbij AC en AR ook nog eens zelf updaten :confused:
 
Dan baseer je het event op de broncellen voor de kolommen AA, AC en AR.

In de laatste code van jou, zou dit zoals reeds gezegd al moeten werken aangezien er geen restrictie is op waar de wijziging plaats vindt. Ik zie dan ook niet in waarom die code niet zou werken. Staat EnableEvents op False?
 
Laatst bewerkt:
Maar deze updaten ook nog eens zelf.

Is er echt geen functie in VBA die excel de macro automatisch laat uitvoeren, desnoods om de x minuten ofzo?
 
Is er echt geen functie in VBA die excel de macro automatisch laat uitvoeren, desnoods om de x minuten ofzo?

Dan gaat het nog leuker worden met de vba kennis die je bezit , zoek eens achter een ON TIME macro en ook hoe je die wil stoppen .:)
 
Hmm, als ik achter een macro wil zoeken die ervoor zorgt dat mijn macro geactiveerd wordt als je op een knop in excel klikt (bestaat dat, een knop in excel maken?) , waarachter moet ik dan googelen? :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan