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

Macro starten wanneer in een bereik ergens een celopmaak verandert

Status
Niet open voor verdere reacties.

anton44

Verenigingslid
Lid geworden
20 mei 2005
Berichten
1.597
Ik blijf aan het optimaliseren ;)
Nu zou ik graag een VBA code willen weten die een macro start als er in een gegeven bereik een celopmaak verandert:
a) wanneer tekstkleur verandert b.v. van zwart naar rood
b) wanneer themakleur van cel(len) (achtergrondkleur) verandert b.v. van "geen opvulling" naar geel.

referentie de code die dat doet wanneer een celinhoud verandert.
Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
 'macro wordt gestart als er wijzigingen worden aangebracht in het opgegeven bereik
 If Not Intersect(Target, Range("F2:M69")) Is Nothing Then
       Call eigen macro
 End If
 End Sub
 
Laatst bewerkt:
Hey gast0660,
Maakt dat een verschil of dat handmatig gebeurd of met voorwaardelijke opmaak ?
 
Ja, kleur met VO wordt niet gezien als kleur.
Handmatig of via VBA wel.
 
Hoi,
Ik denk dat ik uw vraag eerst verkeerd heb begrepen,
Volgens mij kan je geen macro triggeren als alleen de celkleur veranderd.
Als de cel anders moet kleuren bij een (waarde) verandering in een cel, kan je deze code eens testen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim MyRange As Range
Set MyRange = Range("F2:M69")
If Not Intersect(Target, MyRange) Is Nothing Then
Cancel = True
Custom_ColourChange Target
 End If
 End Sub
Private Sub Custom_ColourChange(ByVal Target As Range)
If Target.Interior.ColorIndex = xlNone Then
Target.Interior.ColorIndex = 45
ElseIf Target.Interior.ColorIndex = 45 Then
Target.Interior.ColorIndex = xlNone
End If
End Sub
 
Hoi Philiep,
Ik ga de code dadelijk eens testen.
Ik heb ook grote baat bij mijn a)-vraag - wanneer een tekstkleur verandert.

Als ik je code goed begrijp is het eigenlijk een VBA code die cellen moeten kleuren bij wijzigingen in het bereik. Dit is eigenlijk niet de vraag.
Mijn plan is om een macro te starten voor een berekening van cellen gevuld met waarden als ik een cel/enkele cellen markeer door een deze een celkleur te geven.
 
Laatst bewerkt:
Een test bevestigt dat wanneer een cel in het bereik telkens van inhoud verandert de kleur wisselt.
Het is niet wat ik voor ogen heb.
 
Zie bestandje, omdat het kan, niet omdat dit het meest handige is ;)

Het zou ipv het misbruiken van het commandbarsonupdate-event ook middels het misbruiken van een grafiek en een gedefinieerde naam met UDF kunnen :D
 

Bijlagen

  • Macro Starten bij wijzigen kleur(EvR).xlsm
    25,9 KB · Weergaven: 74
Hi Eric:
WOW. Dit is niet mis. Het werkt wel, ook i.c.m. ASAP-utilities.
Opm. Ik constateer dat blad 1 geactiveerd moet worden alvorens de macro kan werken. Sla je op vanuit blad 1 en opent je werkblad weer (blad 1) dan werkt de macro niet.
Als alleen de tekstkleurwijziging nodig is en dus niet de celkleur kan er dan nog vereenvoudigd worden ?
Ik heb een werkend voorbeeld als bijlage toegevoegd. Om te testen moet wel ASAP-utilities geïnstalleerd zijn.
 

Bijlagen

  • Macro Starten bij wijzigen kleur(EvR) (1).xlsm
    26,9 KB · Weergaven: 39
Laatst bewerkt:
Zodra een nieuw of bestaand workbook er bij geopend wordt verschijnt een foutmelding op:
Code:
    If Intersect(Selection, rMonitor) Is Nothing Then Exit Sub
 
zet :
Code:
 If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub

net onder
Code:
Private Sub objCommandBars_OnUpdate()
 
1) Opm. Ik constateer dat blad 1 geactiveerd moet worden alvorens de macro kan werken. Sla je op vanuit blad 1 en opent je werkblad weer (blad 1) dan werkt de macro niet.

2) Als alleen de tekstkleurwijziging nodig is en dus niet de celkleur kan er dan nog vereenvoudigd worden ?

1) Je kunt het ook in het workbook-open event zetten, of achter een knop
2) Ja kan, maar omdat het nogal een 'duur' event is (het vuurt nml. bij bijna iedere klik of wijziging af) lijkt het me verstandig om juist enkel te monitoren op hetgeen waarop jouw code getriggerd moet worden.

++ overigens als het enkel gaat om sommeren op font-color zou je deze ook in een eigen UDF kunnen stoppen en deze rechtstreeks aanroepen
 
De aanpassing van de regels heeft het probleem opgelost. Prima !
Voor dit doel is het begonnen om voor kostenposten een verschil te maken tussen prognose en realisatie. Prognose=zwart, realisatie=rood.
Hierbij wil ik een optelling hebben van de rode getallen. De oplossing vond ik in ASAP-utilities. Deze vraagt echter bij iedere wijziging een herberekening, te activeren door de gebruiker. Daarvoor heb ik een knop op het werkblad. Deze wil ik proberen te vervangen door een automatische herberekening (vandaar deze draad).
Ergo, ja het gaat primair op het sommeren van font-color getallen. Als er een simpeler oplossing bekend is dan heel graag. Aangezien het aantal rijen van de optelling kan flucueren (groeien/krimpen) lijkt een VBA richting niet voor de hand te liggen. In een eigen UDF stoppen zegt mij eerlijk gezegd niets. :eek:
 
- Eigen UDF, = jouw eigen functie ipv degene van ASAP (cellen in een bereik laten tellen met een specifiek fontkleurtje)
- Heb de code nu in het Workbook-open event gezet, zou dus meteen moeten werken
- Code kijkt nu enkel naar Font-kleur, wanneer deze gewijzigd is in het vastgelegde bereik, wordt het bereik op 'dirty' gezet hetgeen een herberekening triggert (ik neem aan ook de ASAP-functie)
- zie bestandje
edit: oops was fout bestandje, nu de juiste
 

Bijlagen

  • Macro Starten bij wijzigen kleur(E v R).xlsm
    26,6 KB · Weergaven: 53
Laatst bewerkt:
Ik wil hem morgen op grotere schaal (in origineel workbook) testen. Op blad 1 lijkt alles prima maar als ik blad 2 selecteer/activeer komt de foutmelding
Code:
    If Intersect(Selection, rMonitor) Is Nothing Then Exit Sub
 
zet:
Code:
 If ActiveSheet.Name <> rMonitor.Parent.Name Then Exit Sub
onder
Code:
If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub
 
Werkt !
De code zoekt naar de kleurwisseling zwart naar rood en van rood naar zwart. Waar staat dit font-color criterium in de code - ik kan hem niet ontdekken.
 
Code:
 vActSelProp(2, j) = rCell.Font.Color
in de sub getalotofcellprop.....

wanneer er dus een wijziging in font kleur (binnen het monitor-bereik) (maakt niet uit welke kleur) wordt er een hercalculatie getriggerd

Let wel: deze code is wellicht wat overdreven.... (maar des te leuker :d )
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan