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

Vanuit een functie de kleur van de cel veranderen

Status
Niet open voor verdere reacties.

harrypg

Nieuwe gebruiker
Lid geworden
16 feb 2022
Berichten
4
Ik heb een function gemaakt die een bepaalde berekening uitvoert. In de functie geef ik werkelijk en begroot mee.
En wil op basis van de grootte van het verschil tussen werkelijk en begroot de cel waarin de functie wordt uitgevoerd van een bepaalde kleur voorzien.

Als ik gebruik maak van activecell.Interior.ColorIndex = 5287936 dan krijg ik als uitkomst van de functie #Waarde terug
Gek genoeg geeft ActiveCell.Address wel precies de celverwijzing terug die ik zou verwachten. Dus ik dacht activesheet.name en activecell.Address en ik ben klaar.
En die meegeven in sheet(activesheet.name).cell(activecell.Address).Interior.ColorIndex = 5287936

Hoop dat dit wat duidelijk is, wat doe ik fout?

O ja, wanneer ik MsgBox ActiveCell.Address gebruik om bovenstaande te zien, wordt deze messagebox 2 keer getoond. Wordt een formule 2 x uitgevoerd?
 
Gedeclareerd als Integer?
 
Gebruik een UDF niet om de celkleur te wijzigen (het kan wel....maar...)
 
Nieuw hier en voorbeeld bijgevoegd. Laatste reactie doet het ergste vrezen.:confused:
 

Bijlagen

  • Prognose.xlsm
    17,9 KB · Weergaven: 27
Colorindex : max 56

Color: max 256 ^3

Daarvoor heeft de VBEditor F1 en F2
 
Blijkbaar is het niet mogelijk de kleur vanuit een functie te wiijzigen

Helaas, de kleuren heb ik op andere plekken zo gevonden en als ik via opnemen macro de interior kleur wijzig dan krijg ik ook hoge getallen.

Dus indien er nog iemand een hint heeft dan graag, anders sluit ik deze maar eind van de week.
 
plaats dan eerst een voorbeeld die aan de werkelijk voldoet.
 
Probeer dit eens.
In je macro vervang je Select Case Verschil door deze:

Code:
        Select Case Verschil
            Case Is >= VerschilGroen
                varColor = 1
            Case Is >= VerschilGeel
                varColor = 2
            Case Is >= VerschilOranje
                varColor = 3
            Case Else
                varColor = 4
        End Select
        
        With Application.Caller
            .Parent.Evaluate "Changeit(" & .Address(False, False) & ", " & varColor & ")"
        End With

en voeg deze sub toe

Code:
Sub ChangeIt(c1 As Range, x)
Select Case x
    Case Is = 1
        c1.Interior.Color = vbGreen
    Case Is = 2
        c1.Interior.Color = vbYellow
    Case Is = 3
        c1.Interior.Color = RGB(255, 192, 0)
    Case Else
        c1.Interior.Color = vbRed
End Select
End Sub


Het is en blijft een omslachtige manier om voorwaardelijke opmaak toe te passen.

let op dat vbOrange geen geldige vba kleur is.
 
@lam

Zeker zo, want kan ook zo
Code:
Sub ChangeIt(c1 As Range, x)
  cl.interior.color=choose(x,vbGreen,vbYellow,RGB(255,192,0),vbRed)
End Sub
Maar deze 2e macro is sowieso overbodig.
 
@snb

schrijffoutje in je code
Code:
Sub ChangeIt(c1 As Range, x)
  c[COLOR="#FF0000"]1[/COLOR].interior.color=choose(x,vbGreen,vbYellow,RGB(255,192,0),vbRed)
End Sub


Uit wat ik gelezen heb kan een FUNCTION geen wijzigingen aanbrengen aan een werkblad.
Daarom in een extra sub ondergebracht.
 
Het werkt, bedankt voor de laatste voorbeelden, was ik zelf nooit opgekomen. Is misschien omslachtig, maar ik hoef nu niet steeds na te denken de voorwaardelijke opmaak in te stellen.
Nogmaals bedankt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan