Tovább folytatva apró kis makrókról szóló posztsorozatomat, most következzen egy olyan kis VBA-kód leírása, amely alapvetően haszontalannak is nevezhető eredményt produkál, mégis mivel jelentősen javíthatja táblázataink kinézetét és felhasználhatóságát illetve mivel ez is tökéletes kiindulópont lehet egy komolyabb VBA-fejlesztgetéshez, amondó vagyok, hogy vágjunk bele!
A célállapot egyszerűen megfogalmazható, a lentebb látható kiindulótáblázatunkra ráhúzni egy olyan kódot, amelynek eredményeként aktív, kijelölt cellánk sorát és oszlopát is kijelöljük, megkönnyítve ezzel sokoszlopos, soksoros táblázataink áttekinthetőségét.
Erre is van többféle megoldás, én már láttam Conditional Formattingos és komplexebb VBA-s megoldást is, mindenesetre mostani megoldásunk első lépéseként kattintsunk jobb gombbal az adott sheetünk nevére majd a legördülő menüből válasszuk ki a View Code menüpontot:
A VBA-editor felületre jutunk a kattintás után, ahol a fenti két legördülő menüből egyrészt a Worksheetet kell választanunk, eseményként pedig a SelectionChange menüpontot, azaz adott sheetünkhöz rendelünk hozzá egy kijelölési eseményt. Ezután a program automatikusan létrehozza az eseményt:
Hozzunk ezután létre négy változót (hogy miért négyet, az mindjárt kiderül majd), mindet egész szám, azaz Integer típussal:
Sorszam változónkba majd az aktuális sor számát, Oszlopszam változónkba pedig az aktuális oszlop számát fogjuk betölteni, a másik két változó, x és y pedig egy olyan ciklusban lesz majd a segítségünkre, ahol az aktuális sorunk illetve oszlopunk számáig kijelöljük a tartományt. Remélhetőleg ez így érthető volt, ha mégsem, a későbbi lépéseknél egyértelművé válik majd.
Úgyhogy ahogy akkor csináljuk is meg az első két változónk feltöltését, az előbbi leírás alapján elég egyértelmű hogyan:
Célszerű ide beszúrni egy "kifehérítést" egy, celláinkhoz tartozó Interior objektum ColorIndexének fehérre állításával, azaz:
Cells.Interior.ColorIndex = 0
Ezzel már egyébként majdnem kész is vagyunk, hiszen most jön a legfontosabb része programunknak, a két For-Next ciklus. Ez a ciklus arra szolgál, hogy egy meghatározott VBA-kódot meghatározott számban futtassunk le, szintaktikája elég egyszerű:
FOR "Egyik változó" = Kezdőérték to "Másik változó"
Mit csináljon a kód
Next "Egyik változó"
Azaz az "Egyik változó"-ba betöltjük a kezdőértékünket (egyet, nullát stb.), majd innentől kezdve a másik változónkba töltött értékig annyiszor le fogja futtatni a kódot, amit a FOR és a NEXT közé ágyaztunk.
Azaz amit most tennünk kell, az az, hogy az első sortól (illetve oszloptól) addig a sorig és oszlopig megváltoztatni celláink hátterét, amekkora oszlop- illetve sorszámot a két erre kijelölt változónkba betöltöttünk, majd lezárni a ciklust.
Egy cella hátterszínét VBA-ban úgy tudjuk megváltoztatni, hogy fogjuk az érintett cellát, majd a hozzárendelt Interior objektum ColorIndexét megváltoztatjuk (a színek listája bárhol hozzáférhető könnyedén). Egy cellát úgy tudunk kijelölni, hogy használjuk a Cells(sor, oszlop) parancsot.
Tehát a következő képen szereplő kódrész már érthetővé is válik:
És ezzel kész is vagyunk! Ismételni tudom csak magam, tisztában vagyok vele, hogy nem egy bonyolult VBA-kódról beszélünk, de kiindulási alapnak az otthoni gyakorláshoz tökéletes lehet! Ötletek, problémák, kritikák jöhetnek!
Másoláshoz maga a kód:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Sorszam As Integer, Oszlopszam As Integer, x As Integer, y As Integer
Cells.Interior.ColorIndex = 0
Sorszam = ActiveCell.Row
Oszlopszam = ActiveCell.Column
For x = 1 To Sorszam
Cells(x, Oszlopszam).Interior.ColorIndex = 37
For y = 1 To Oszlopszam
Cells(Sorszam, y).Interior.ColorIndex = 37
Next y
Next x
End Sub