VBA-koodissa olevaan objektiin viittaaminen on tärkeää, koska sinun on tunnistettava objekti, jonka kanssa haluat työskennellä Excel 2016:ssa. Loppujen lopuksi VBA ei voi lukea ajatuksiasi – vielä. Huhutaan, että ajatustenlukuobjekti otetaan käyttöön Excel 2019:ssä.
Voit työskennellä kokonaisen esinekokoelman kanssa yhdellä iskulla. Useammin sinun on kuitenkin työskenneltävä tietyn objektin kanssa kokoelmassa (kuten työkirjan tietyn laskentataulukon kanssa). Jos haluat viitata yhteen kokoelman objektiin, laita objektin nimi tai indeksinumero suluihin kokoelman nimen perään seuraavasti:
Tehtävätaulukot ("Sheet1")
Huomaa, että arkin nimi on lainausmerkeissä. Jos lainausmerkit jätetään pois, Excel ei pysty tunnistamaan objektia (ja olettaa, että se on muuttujan nimi).
Jos Sheet1 on kokoelman ensimmäinen (tai ainoa) laskentataulukko, voit käyttää myös seuraavaa viittausta:
Tehtävätaulukot (1)
Tässä tapauksessa numero ei ole lainausmerkeissä. Lopputulos? Jos viittaat kohteeseen käyttämällä sen nimeä, käytä lainausmerkkejä. Jos viittaat kohteeseen käyttämällä sen indeksinumeroa, käytä tavallista numeroa ilman lainausmerkkejä.
Entä kaaviotaulukot? Kaaviotaulukko sisältää yhden kaavion. Siinä on taulukkovälilehti, mutta se ei ole laskentataulukko. No, kuten käy ilmi, objektimallissa on kokoelma nimeltä Kaaviot. Tämä kokoelma sisältää kaikki työkirjan kaaviotaulukkoobjektit (eikä sisällä laskentataulukkoon upotettuja kaavioita).
Ja pitääksemme asiat loogisina, on olemassa toinen kokoelma nimeltä Sheets. Taulukot-kokoelma sisältää kaikki työkirjan taulukot (laskentataulukot ja kaaviotaulukot). Sheets-kokoelma on kätevä, jos haluat työskennellä työkirjan kaikkien taulukoiden kanssa etkä välitä siitä, ovatko ne laskentataulukoita vai kaaviotaulukoita.
Yksittäinen Sheet1-niminen laskentataulukko on siis kahden kokoelman jäsen: Työarkit-kokoelman ja Taulukot-kokoelman. Voit viitata siihen kahdella tavalla:
Tehtävätaulukot ("Sheet1")
Taulukot ("Sheet1")
Navigointi hierarkiassa
Jos haluat työskennellä Excel-objektien kanssa, ne ovat kaikki Application-objektin alla. Joten aloita kirjoittamalla Application .
Jokainen Excelin objektimallin objekti on Application-objektin alla. Pääset näihin objekteihin siirtymällä hierarkiassa alaspäin ja yhdistämällä jokainen matkallasi oleva kohde piste (.) -operaattorilla. Päästäksesi Book1.xlsx-nimiseen työkirjaobjektiin, aloita Application-objektista ja siirry alas Työkirjat-kokoelmaobjektiin:
Application.Workbooks("Kirja1.xlsx")
Jos haluat siirtyä pidemmälle tiettyyn laskentataulukkoon, lisää pisteoperaattori ja käytä Työarkit-kokoelmaobjektia:
Application.Workbooks("Kirja1.xlsx").Työtaulukot(1)
Ei vielä tarpeeksi kaukana? Jos todella haluat saada arvon solusta A1 työkirjan ensimmäisessä laskentataulukossa nimeltä Book1.xlsx, sinun on siirryttävä vielä yksi taso Alue-objektiin:
Sovellus. Työkirjat ("Kirja1.xlsx"). Työarkit(1). Alue("A1"). Arvo
Kun viittaat Range-objektiin tällä tavalla, sitä kutsutaan täydelliseksi viittaukseksi. Olet kertonut Excelille tarkalleen, minkä alueen haluat, millä laskentataulukolla ja missä työkirjassa, etkä ole jättänyt mitään mielikuvituksen varaan. Mielikuvitus on hyvä ihmisissä, mutta ei niin hyvä tietokoneohjelmissa.
Muuten, työkirjojen nimissä on myös piste, joka erottaa tiedostonimen päätteestä (esimerkiksi Kirja1.xlsx). Se on vain sattumaa. Tiedostonimen pisteellä ei ole mitään tekemistä piste-operaattorin kanssa.
Yksinkertaistaa objektiviittauksia
Jos sinun vaadittaisiin täyttämään kaikki tekemäsi objektiviittaukset, koodistasi tulisi melko pitkä ja sitä voi olla vaikeampi lukea. Onneksi Excel tarjoaa sinulle pikanäppäimiä, jotka voivat parantaa luettavuutta (ja säästää kirjoitusta). Ensinnäkin Sovellus-objekti oletetaan aina. On vain muutamia tapauksia, joissa se on järkevää kirjoittaa. Sovellusobjektin viittauksen jättäminen pois lyhentää esimerkkiä muotoon
Työkirjat ("Kirja1.xlsx"). Työarkit (1). Alue ("A1"). Arvo
Se on aika hyvä parannus. Mutta odota, siellä on enemmän. Jos olet varma, että Book1.xlsx on aktiivinen työkirja, voit jättää myös tämän viittauksen pois. Nyt olet alaspäin
Työarkit(1).Alue(“A1”).Arvo
Nyt pääset jonnekin. Arvasitko seuraavan pikakuvakkeen? Oikein. Jos tiedät, että ensimmäinen laskentataulukko on tällä hetkellä aktiivinen laskentataulukko, Excel olettaa tämän viittauksen ja antaa sinun vain kirjoittaa
Alue("A1"). Arvo
Toisin kuin jotkut saattavat ajatella, Excelissä ei ole solu-objektia. Solu on yksinkertaisesti alueella esine, joka koostuu vain yksi elementti.
Tässä kuvatut pikanäppäimet ovat mahtavia, mutta ne voivat myös olla vaarallisia. Entä jos luulet vain, että Book1.xlsx on aktiivinen työkirja? Saatat saada virheilmoituksen, tai vielä pahempaa, saatat saada väärän arvon etkä edes ymmärrä sen olevan väärin. Tästä syystä on usein parasta täydentää objektiviittaukset.
With-End With -rakenne auttaa sinua täydentämään viittauksesi, mutta auttaa myös tekemään koodista luettavamman ja vähentää kirjoittamista. Parhaat puolet eri vaihtoehdoista!