Excel Voorwaardelijke opmaak icm VBA

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • advena
  • Registratie: Augustus 2011
  • Laatst online: 11-09 15:24
Beste tweakers,

Ik ben een beetje aan het kloten met Excel, en ik ben tegen een probleem aangelopen.

Ik heb een hele waslijst met Voorwaardelijke opmaak, deze zorgt ervoor dat tekst "wit" wordt wanneer waardes in bepaalde cellen te laag zijn. Dit om te zorgen dat die info niet onnodig gegeven wordt.

Het punt is nu eigenlijk, dat ik wil dat wanneer de tekst zichtbaar wordt, enkele van die vakjes ook een randje erom heen krijgen.

Ik kan alle VO's gaan aanpassen, en de cellen die dit randje moeten hebben apart invoeren. Maar dit is echt enorm veel werk.

Ik weet dat met VBA het mogelijk is om via cel.font.colorindex een nr te krijgen dat bij die kleur hoort. Dit werkt echter niet met de VO en alleen met de oorspronkelijke kleur van de cel

Public Function TEKSTKLEUR(ByRef cel As Range) As Variant
TEKSTKLEUR = cel.Font.ColorIndex
End Function

Dit is de code die ik gebruik om de kleur op te vragen, hoe zorg ik er nou voor dat hij ook kleuren door VO herkent?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik snap eigenlijk niet precies welk probleem je wil oplossen? :?

Een functie als http://www.vbaexpress.com/kb/getarticle.php?kb_id=190 is snel gevonden, maar lijkt mij veelal onzin.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Nog even los van VBA:
Ik kan alle VO's gaan aanpassen, en de cellen die dit randje moeten hebben apart invoeren. Maar dit is echt enorm veel werk.
Dat is toch niet zoveel werk? Gewoon met ctrl alle cellen selecteren en in 1x de juiste (voorwaardelijke) opmaak zetten. (Maak er dan meteen een named range van).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • advena
  • Registratie: Augustus 2011
  • Laatst online: 11-09 15:24
Pedorus, volgens mij is dat precies wat ik zoek ja, maar ik kon het zelf via google niet vinden, misschien verkeerd gezocht.

Edit: De code werkt niet, ik krijg een #WAARDE error bij het invoeren van de formule.

F_J_K Ik heb een stuk of 20-30 VO's die er voor zorgen dat bepaalde tekst zichtbaar wordt als aan bepaalde voorwaardes gedaan wordt. Ik wil nu achteraf nog toevoegen dat een deel van de cellen die zichtbaar worden, ook een randje eromheen krijgen.

Het zou niet zo moeilijk zijn wanneer er een functie is die de tekstkleur kan vinden, en die dat ook ziet bij VO. Als ik het nu zou willen doen, zou ik nog eens 20-30 VO's moeten aanmaken die de bepaalde cellen aanpassen. Maar het lijkt mij dat het via VBA makkelijker moet zijn om een dergelijke functie te maken,.

[ Voor 6% gewijzigd door advena op 02-11-2011 17:37 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
advena schreef op woensdag 02 november 2011 @ 17:24:
Edit: De code werkt niet, ik krijg een #WAARDE error bij het invoeren van de formule.
Klinkt alsof je ,"f" bent vergeten (als in =ConditionalColor(A1,"f")). Evengoed snap ik niet echt waar je die functie voor wil gebruiken. Het lijkt me logischer om gewoon een voorwaardelijke-opmaak-regeltje met kadertje te maken voor de juiste cellen?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • advena
  • Registratie: Augustus 2011
  • Laatst online: 11-09 15:24
Zoals ik al zei, zou dat nog eens een uur werk zijn, om alle formules hiervoor in te vullen. Ik moet dat per 3a4 cellen anders doen, op ongeveer 100 cellen

en de "f" werkt ook niet

[ Voor 8% gewijzigd door advena op 02-11-2011 20:51 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Nu ik er nog eens naar kijk werkt die formule niet met Excel 2007 of later, omdat daar voorwaardelijke opmaak herzien is... (XlFormatConditionType toegevoegd, formules ondersteund). De volgende versie zou wel moeten werken voor de traditionele conditionele opmaak (dus niet top x enzo):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Function ConditionalFontColor(cel As Range) As Long
    Dim frml As String, frml2 As String, i As Long
    Application.Volatile
    ConditionalFontColor = cel.Font.ColorIndex
    With cel.FormatConditions
        For i = 1 To .Count
            frml = .Item(i).Formula1
            If Left(frml, 1) = "=" Then frml = Mid(frml, 2)
            If .Item(i).Type = xlCellValue Then
                Select Case .Item(i).Operator
                Case xlEqual
                    frml = cel & "=" & frml
                Case xlNotEqual
                    frml = cel & "<>" & frml
                Case xlBetween, xlNotBetween
                    frml2 = .Item(i).Formula2
                    If Left(frml2, 1) = "=" Then frml2 = Mid(frml2, 2)
                    frml = IIf(.Item(i).Operator = xlBetween, _
                        "AND(" & frml & "<=" & cel & "," & cel & "<=" & frml2 & ")", _
                        "OR(" & frml & ">" & cel & "," & cel & ">" & frml2 & ")")
                Case xlLess
                    frml = cel & "<" & frml
                Case xlLessEqual
                    frml = cel & "<=" & frml
                Case xlGreater
                    frml = cel & ">" & frml
                Case xlGreaterEqual
                    frml = cel & ">=" & frml
                End Select
            ElseIf .Item(i).Type <> xlExpression Then
                Err.Raise 42731, , "unsupported conditional formatting"
            End If
            frml = Application.ConvertFormula(frml, xlA1, xlR1C1, , ActiveCell)
            frml = Application.ConvertFormula(frml, xlR1C1, xlA1, xlAbsolute, cel)
            If Application.Evaluate(frml) Then
                On Error Resume Next
                ConditionalFontColor = .Item(i).Font.ColorIndex
                If Err.Number = 0 Or .Item(i).StopIfTrue Then Exit Function
                On Error GoTo 0
            End If
        Next i
    End With
End Function
advena schreef op woensdag 02 november 2011 @ 20:48:
Zoals ik al zei, zou dat nog eens een uur werk zijn, om alle formules hiervoor in te vullen. Ik moet dat per 3a4 cellen anders doen, op ongeveer 100 cellen
Dat zou natuurlijk ook met een macro kunnen.. Kan er zonder meer details weinig over zeggen. :p

[ Voor 18% gewijzigd door pedorus op 03-11-2011 00:35 . Reden: bleef buggy ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • advena
  • Registratie: Augustus 2011
  • Laatst online: 11-09 15:24
Hij pakt em niet op de VO, alleen op normale opmaak.

Simple versie van wat ik heb:
A1 = 0 of 1
A2:A4 = zichtbaar bij A1=1 en onzichbaar bij A1=0 dmv VO
A4 moet nu buiten zichtbaarheid, ook een rand krijgen

Was het zo simpel als hier, dan had ik heel makkelijk een nieuwe VO hiervoor kunnen maken
Echter is het nite alleen de A maar gaat het stukken verder. Dat is probleem 1, al zou dat nog niet zo heel erg zijn.
Het grotere probleem is een een serie complexe formules die zorgen voor de waardes in verschillende cellen.

Al deze formules zou ik 1 voor 1 moeten gaan kopieeren, en zelfs dan nog een aanpassing maken, wil ik dit bereiken.

Wanneer het dus mogelijk is om te zien wanneer VO wordt toegepast op een Cel, in dit geval Font Color. Kan ik vervolgens 1 VO gebruiken voor AL deze waardes. Dat maakt het natuurlijk stukken makkelijker.

De waardes in deze cellen veranderen niet altijd, soms zijn deze waardes al vastgelegd voordat ze zichtbaar moeten worden. Het moet dus puur uit de opmaak gehaald kunnen worden

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
advena schreef op woensdag 02 november 2011 @ 23:20:
Hij pakt em niet op de VO, alleen op normale opmaak.
Tsja, ongeteste code he, ik heb het iets aangepast, maar dan nog zijn er nogal wat mogelijkheden waarbij dit niet goed gaat werken (zoals blanks, top x).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1