Å referere til et objekt i VBA-koden din er viktig fordi du må identifisere objektet du vil jobbe med i Excel 2016. Tross alt kan ikke VBA lese tankene dine — ennå. Det ryktes at tankeleserobjektet vil bli introdusert i Excel 2019.
Du kan jobbe med en hel samling av gjenstander i ett slag. Oftere må du imidlertid jobbe med et spesifikt objekt i en samling (for eksempel et bestemt regneark i en arbeidsbok). For å referere til et enkelt objekt fra en samling, setter du objektets navn eller indeksnummer i parentes etter navnet på samlingen, slik:
Regneark(“Ark1”)
Legg merke til at arkets navn står i anførselstegn. Hvis du utelater anførselstegnene, vil ikke Excel kunne identifisere objektet (og vil anta at det er et variabelnavn).
Hvis Ark1 er det første (eller eneste) regnearket i samlingen, kan du også bruke følgende referanse:
Regneark(1)
I dette tilfellet står ikke tallet i anførselstegn. Bunnlinjen? Hvis du refererer til et objekt ved å bruke navnet, bruk anførselstegn. Hvis du refererer til et objekt ved å bruke dets indeksnummer, bruk et vanlig tall uten anførselstegn.
Hva med diagramark? Et diagramark inneholder et enkelt diagram. Den har en arkfane, men det er ikke et regneark. Vel, som det viser seg, har objektmodellen en samling kalt Charts. Denne samlingen inneholder alle diagramarkobjektene i en arbeidsbok (og inkluderer ikke diagrammer innebygd i et regneark).
Og bare for å holde ting logisk, er det en annen samling kalt Sheets. Ark-samlingen inneholder alle ark (regneark og diagramark) i en arbeidsbok. Ark-samlingen er nyttig hvis du vil jobbe med alle arkene i en arbeidsbok og ikke bryr deg om de er regneark eller diagramark.
Så et enkelt regneark kalt Sheet1 er medlem av to samlinger: regnearksamlingen og arksamlingen. Du kan referere til det på en av to måter:
Regneark(“Ark1”)
Ark(“Ark1”)
Navigerer gjennom hierarkiet
Hvis du ønsker å jobbe med Excel-objekter, ligger de alle under Application-objektet. Så start med å skrive Application .
Alle andre objekter i Excels objektmodell ligger under Application-objektet. Du kommer til disse objektene ved å bevege deg nedover i hierarkiet og koble hvert objekt på din vei med prikken (.)-operatoren. For å komme til Workbook-objektet kalt Book1.xlsx, start med Application-objektet og naviger ned til Workbooks-samlingsobjektet:
Application.Workbooks(“Book1.xlsx”)
For å navigere lenger til et spesifikt regneark, legg til en punktoperator og få tilgang til regnearksamlingsobjektet:
Application.Workbooks(“Book1.xlsx”).Worksheets(1)
Ikke langt nok ennå? Hvis du virkelig ønsker å hente verdien fra celle A1 på det første regnearket i arbeidsboken kalt Book1.xlsx, må du navigere ett nivå til til Range-objektet:
Application.Workbooks(“Book1.xlsx”).Worksheets(1).Range(“A1”).Verdi
Når du refererer til et Range-objekt på denne måten, kalles det en fullt kvalifisert referanse. Du har fortalt Excel nøyaktig hvilket område du vil ha, på hvilket regneark og i hvilken arbeidsbok, og har ikke overlatt noe til fantasien. Fantasi er bra hos mennesker, men ikke så bra i dataprogrammer.
Forresten, arbeidsboknavn har også en prikk for å skille filnavnet fra filtypen (for eksempel Book1.xlsx). Det er bare en tilfeldighet. Prikken i et filnavn har ingenting i det hele tatt å gjøre med punktoperatoren.
Forenkling av objektreferanser
Hvis du ble pålagt å fullt ut kvalifisere hver objektreferanse du lager, ville koden din blitt ganske lang, og den kan være vanskeligere å lese. Heldigvis gir Excel deg noen snarveier som kan forbedre lesbarheten (og spare deg for litt skriving). For det første antas alltid Application-objektet. Det er bare noen få tilfeller hvor det er fornuftig å skrive det. Å utelate Application-objektreferansen forkorter eksemplet til
Arbeidsbøker(“Book1.xlsx”).Arbeidsark(1).Område(“A1”).Verdi
Det er en ganske god forbedring. Men vent, det er mer. Hvis du er sikker på at Book1.xlsx er den aktive arbeidsboken, kan du også utelate den referansen. Nå er du nede på
Regneark(1).Område(“A1”).Verdi
Nå kommer du et sted. Har du gjettet neste snarvei? Det er riktig. Hvis du vet at det første regnearket er det aktive regnearket, antar Excel den referansen og lar deg bare skrive
Område(“A1”). Verdi
I motsetning til hva noen kanskje tror, har ikke Excel et celleobjekt. En celle er ganske enkelt et Range-objekt som består av bare ett element.
Snarveiene som er beskrevet her er flotte, men de kan også være farlige. Hva om du bare tror Book1.xlsx er den aktive arbeidsboken? Du kan få en feil, eller enda verre, du kan få feil verdi og ikke engang innse at det er feil. Av den grunn er det ofte best å fullt ut kvalifisere objektreferansene dine.
With-End With-strukturen hjelper deg med å fullt ut kvalifisere referansene dine, men bidrar også til å gjøre koden mer lesbar og reduserer skrivingen. Det beste fra begge verdenene!