Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel 2000 VBA] Rijen markeren*

Pagina: 1
Acties:

  • kidde
  • Registratie: Maart 2005
  • Laatst online: 19-08 08:22
Dag beste medeTweakers,

Vandaag had ik het volgende probleem:
Soms loop ik in Excel rijen in te voegen, dat moet nu eenmaal voor m'n werkzaamheden.
Nu zijn de rijen om en om gekleurd ter bevordering van de leesbaarheid; althans, dat is de bedoeling. Van te voren zijn alle rijen juist gekleurd, maar als je dus een rij invoegt dan schop je dat schema in de war.

Het commando 'Format paint' werkt op zich maar dit moet eleganter en efficiënter kunnen.

Het volgende was ik van plan:
Een (VBA naar ik aanneem?) macro maken die aan de hand van de positie van de geselecteerde cel de rij dmv. conditionele formatting de juiste kleur maakt.

Dit heb ik geprobeerd:
Conditionele formatting dmv. een formule werkte, maar de ISEVEN of ISODD functie kon ik niet gebruiken wegens foutmelding van verwijzing naar een functie 'buiten' mijn huidige sheet. Dat is op zich onzin lijkt me zo want ik wil verwijs alleen naar data uit de huidige sheet, maar het schijnt dat deze functies 'extern' zijn opgeslagen dus vandaar denk ik. Dat was simpel te ondervangen door =(0 = MOD( ROW() 2)) te gebruiken, en dat werkte gelukkig wel hoewel minder elegant natuurlijk.
Nu wil ik de boel in een macro vangen; zodat als ik een sneltoets gebruik deze conditionele formatting aan bepaalde kolommen van m'n huidige rij wordt toegevoegd.
Dus heb ik de de Macro-record functie gebruikt, maar deze voegt m'n huidige rijnummer als constante aan de macro toe. Terwijl de macro juist moet uitzoeken welke rij geselecteerd is, want aan de hand van de rij waarin de huidige geselecteerde cel zich bevind wil ik van die rij kolom B tot W selecteren om daar de conditionele formatting op toe te passen.
Helaas kan ik geen VBA, vandaag m'n eerste babystapjes gemaakt maar makkelijk is anders. En om nou vier uur bezig te zijn in de baas z'n tijd om een oplossing te vinden terwijl het handmatig in drie minuten klaar is vind ik ook weer zo wat; maar anderen hebben dit probleem vast eerder opgelost.

Als ik het me goed herinner, probeerde ik zoiets als het volgende:

dim rowN as long (volgens VB help is de property 'row' van het type long, vandaar deze poging; alhoewel ik niet weet of declaratie nodig is?)
rowN =

en vervolgens had ik een expressie uitgevonden - iets als ActiveCell.Rows - die het nummer van de rij als 'long' retourneerde, maar ik kreeg een foutmelding 424 (Object required).

Dit is de vraag:

Ik moet het nummer van de rij die 'momenteel' geselecteerd is in het veld van de formule in de dialoogbox 'conditional formatting' zien in te voegen, dmv. een macro. Dit zodat ik hetzij in de VB macro zelf hetzij in de formule van 'conditional formatting' kan uitzoeken of dat rijnummer even of oneven is en aan de hand daarvan de rij donker of licht kleuren. Mocht het binnen de VB macro zelf kunnen heeft dat het voordeel dat ik geen conditionele formattig meer nodigheb; en dat verdient de voorkeur natuurlijk.

Tja, hoe moeilijk kan het zijn iets een achtergrondkleurtje te geven zou je haast denken. Mocht hier een mooie oplossing voor zijn kan ik hem hopelijk ook voor tabellen in Word gebruiken; hoewel die geen celnummers hebben dus dat wordt lastig. Alle hulp welkom!

HK


  • PromoX
  • Registratie: Februari 2002
  • Laatst online: 26-11 13:17

PromoX

Flying solo

Zelf iets verzinnen kan en zal ongetwijfeld heel leuk zijn, maar kijk 's naar de ASAP Utilities. Biedt vrij veel mogelijkheden, waaronder het selecteren van bijvoorbeeld even/oneven rijen/kolommen of cellen die aan bepaalde voorwaarden voldoen.

And I'm the only one and I walk alone.


Verwijderd

Als ik je reisverslag goed begrijp, ben je op zoek naar een macro die de gehele rij van een werkblad om en om kleurt?

Bij mij werkt dit wel (bestaat er een VBA-functie om te controleren of een getal even of oneven is? Kan alleen een worksheetfunctie vinden):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_Change(ByVal Target As Range)

Dim UR As Range

Set UR = Me.UsedRange

For i = 1 To UR.Rows.Count
    If i / 2 <> Int(i / 2) Then
        Cells(i, 1).EntireRow.Interior.ColorIndex = 17
    Else
        Cells(i, 1).EntireRow.Interior.ColorIndex = xlNone
    End If
Next i
End Sub


Het getal 17 is een indexgetal voor de rijkleur dat je naar hartelust kunt aanpassen.

[ Voor 3% gewijzigd door Verwijderd op 14-01-2009 22:07 . Reden: Opmaak werkt natuurlijk niet tussen codetags... ]


  • NickH
  • Registratie: Augustus 2003
  • Laatst online: 31-10 12:24
Verwijderd schreef op woensdag 14 januari 2009 @ 22:05:


Bij mij werkt dit wel (bestaat er een VBA-functie om te controleren of een getal even of oneven is?
Delen door twee en kijken of het verschilt van de math.floor()?

Of denk ik nou teveel in quick 'n dirty? :Y)

Verwijderd

Heb het 'opgelost' middels de check op rij 8...maar chique kun je dat niet noemen. Ach ja, haalde op school altijd al onvoldoendes voor wiskunde :P

  • kidde
  • Registratie: Maart 2005
  • Laatst online: 19-08 08:22
Als reactie op PromoX:

Dat is inderdaad een heel goed idee, bedankt voor de suggestie. Maar de volgende problemen doemen op:

-Ik werk in een commerciële organisatie ('t is voor m'n werk), en zie zojuist dat ik dan een licentie moet aanschaffen; zie ik dat goed? Anders is het zeker het proberen waard. Ons bedrijf is nogal zwaar getroffen door de kredietcrises (waarschijnlijk weinig andere bedrijven zo hard), dus we moeten roeien met de riemen die we hebben. 30 Euro - ook als het verderop 100 euro kan opleveren - is soms al teveel.
-IT beleid, ik ben maar een simpele tekenaar zonder veel IT-rechten over m'n "eigen" computer dus zelf mag ik helaas (officiëel) geen handige tools installeren. Misschien dat het desondanks wel kan, maar daar zal het IT-departement misschien minder blij mee zijn.

Ik zie zojuist dat een variant op deze vraag eerder gepost is, dus misschien goed om te zeggen waarom de oplossing die daar geboden wordt - conditionele opmaak voor de gehele sheet - voor mij niet werkt:

Ik wil deze 'formatting' alleen toepassen voor 'nieuwe' rijen, want andere rijen hebben soms al een ander opmaak gekregen die ik niet mag veranderen. Dus het idee is deze macro uit te voeren na het invoegen van een nieuwe rij. Ook lees ik net dat conditionele opmaak opnieuw wordt gecalculeerd iedere keer dat de sheet dat ook wordt, en voor 1000+ rijen is dat misschien niet zo'n goede oplossing.
In de ideale situatie zou ik controleren of iemand al een opmaak van een rij heeft gewijzigd (als de achtergrond niet geel is in praktische termen) en vóórdat ik opsla de opmaak op alle rijen die nog nooit zijn 'veranderd' toepassen, maar dat is denk ik nog veel meer werk. Ook is er de kans dat als ik een fout maak ik de hele sheet verkloot (dan heb ik een groot probleem), vandaar de macro zodat ik hooguit verkloot wat ik zelf toevoeg. Vandaar de wens 'handmatig' via een sneltoets een macro uit te kunnen voeren.

HK


Verwijderd

Ik snap het even niet - om een lang verhaal kort te maken: mag je nu wel macro's draaien op je werk of niet? Als je geen macro's kunt draaien, kun je een oplossing met VBA sowieso op je buik schrijven...dan wordt het edel handwerk - daar is overigens ook niks mis mee! ;)

  • kidde
  • Registratie: Maart 2005
  • Laatst online: 19-08 08:22
Bedankt voor de reacties iedereen.

Argule: Dat was nog een 'verouderde' reactie op de tip van PromoX om ASAP utilities te installeren; had jouw reactie nog niet gelezen ('t gaat heel rap hier!). ASAP-utilities installeren mag ik niet, macro's maken wel, de huidige sheet verkloten niet, veel tijd steken in het zoeken naar een oplossing in de baas z'n tijd ook niet; dan hebben ze liever dat ik het handmatig klikkerdeklik doe; maar dat laatste vind ik zelf weer verspilling van tijd. Binnen die permissies moet ik ongeveer werken.
Als ik je reisverslag goed begrijp, ben je op zoek naar een macro die de gehele rij van een werkblad om en om kleurt?
Nee, helaas niet de hele rij, alleen kolom B tot W van die rij. Kolom A heeft weer een eigen kleur waar die kleur weer een eigen functie heeft. Dus als het rij 226 is, dan range B226:W226.

Overigens vind ik beide oplossingen voor het 'even / oneven' probleem prima, zo deed ik het zelf ook altijd en zo doet de 'ISEVEN / ISODD' functie uit Excel het zelf vast ook ;) .

Alargule: Aan dat stuk VBA heb ik wel wat, dat is inderdaad het idee wat ik had. Maar volgens mij werkt die macro voor het hele werkblad, ik zou liever hebben dat hij alleen voor de rij werkt waar ik momenteel mee bezig ben (aan het bewerken ben) zoals in mijn vorige reactie van 22:17 uitgelegd (was ik vergeten gelijk te vermelden, excuses). In Tweaker termen heb ik alleen "append" rechten op de sheet zodat ik weinig kan verkloten, alleen die rechten zijn niet in de software geïmplementeerd maar mondeling medegedeeld.

HK


Verwijderd

Met onderstaande code wordt alleen de rij gekleurd binnen het bereik van de kolommen B:W indien je hier een wijziging in aanbrengt (= erin bezig bent). De macro wordt ook alleen getriggerd wanneer de gewijzigde cel zich binnen het kolommenbereik B:W bevindt (wijzigingen in kolom A of kolommen >W hebben dus geen invloed).

code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Me.Range("B:W")) Is Nothing Then
    If Target.Row / 2 <> Int(Target.Row / 2) Then
        Range(Cells(Target.Row, 2), Cells(Target.Row, 23)).Interior.ColorIndex = 15
    Else
        Range(Cells(Target.Row, 2), Cells(Target.Row, 23)).Interior.ColorIndex = xlNone
    End If
End If
    
End Sub


Ik merk overigens dat dit bij het deleten van rijen ertoe kan leiden dat je regels alsnog verkeerd komen te staan. Misschien is de beste oplossing wel een combinatie tussen beide codes...maar dat laat ik graag aan jou over; ik denk dat ik je met deze voorbeelden een aardige zet in de goede richting heb gegeven ;)

[ Voor 18% gewijzigd door Verwijderd op 14-01-2009 22:48 ]


  • kidde
  • Registratie: Maart 2005
  • Laatst online: 19-08 08:22
Ja, inderdaad, ik zou er bijna moeten zijn. Ik ga het proberen straks (zodra ik een halve liter koffie opheb ook)! Nogmaals bedankt.

HK

Pagina: 1