Det er vigtigt at henvise til et objekt i din VBA-kode, fordi du skal identificere det objekt, du vil arbejde med i Excel 2016. VBA kan trods alt ikke læse dine tanker — endnu. Det forlyder, at tankelæsningsobjektet vil blive introduceret i Excel 2019.
Du kan arbejde med en hel samling af genstande i ét hug. Oftere skal du dog arbejde med et bestemt objekt i en samling (såsom et bestemt regneark i en projektmappe). For at referere til et enkelt objekt fra en samling, sætter du objektets navn eller indeksnummer i parentes efter navnet på samlingen, sådan:
Arbejdsark ("Ark1")
Bemærk, at arkets navn er i anførselstegn. Hvis du udelader anførselstegnene, vil Excel ikke være i stand til at identificere objektet (og vil antage, at det er et variabelnavn).
Hvis Ark1 er det første (eller eneste) regneark i samlingen, kan du også bruge følgende reference:
Arbejdsark(1)
I dette tilfælde står tallet ikke i anførselstegn. Bundlinie? Hvis du henviser til et objekt ved at bruge dets navn, skal du bruge anførselstegn. Hvis du henviser til et objekt ved at bruge dets indeksnummer, skal du bruge et almindeligt tal uden anførselstegn.
Hvad med diagramark? Et diagramark indeholder et enkelt diagram. Det har en arkfane, men det er ikke et regneark. Nå, som det viser sig, har objektmodellen en samling kaldet Charts. Denne samling indeholder alle diagramarkobjekterne i en projektmappe (og inkluderer ikke diagrammer, der er indlejret i et regneark).
Og bare for at holde tingene logiske, er der en anden samling kaldet Sheets. Arksamlingen indeholder alle ark (arbejdsark og diagramark) i en projektmappe. Sheets-samlingen er praktisk, hvis du vil arbejde med alle ark i en projektmappe og er ligeglad med, om de er arbejdsark eller diagramark.
Så et enkelt regneark ved navn Sheet1 er medlem af to samlinger: Worksheets-samlingen og Sheets-samlingen. Du kan henvise til det på en af to måder:
Arbejdsark ("Ark1")
Ark ("Ark1")
Navigerer gennem hierarkiet
Hvis du vil arbejde med Excel-objekter, ligger de alle under Application-objektet. Så start med at skrive Application .
Hvert andet objekt i Excels objektmodel er under applikationsobjektet. Du kommer til disse objekter ved at bevæge dig ned i hierarkiet og forbinde hvert objekt på din vej med prik-operatoren (.). For at komme til projektmappeobjektet med navnet Book1.xlsx, start med applikationsobjektet og naviger ned til projektbogssamlingsobjektet:
Application.Workbooks(“Book1.xlsx”)
For at navigere længere til et specifikt regneark skal du tilføje en prikoperator og få adgang til samlingsobjektet Arbejdsark:
Application.Workbooks(“Book1.xlsx”).Worksheets(1)
Ikke langt nok endnu? Hvis du virkelig ønsker at få værdien fra celle A1 på det første regneark i projektmappen kaldet Book1.xlsx, skal du navigere et niveau mere til Range-objektet:
Application.Workbooks(“Book1.xlsx”).Worksheets(1).Range(“A1”).Værdi
Når du refererer til et Range-objekt på denne måde, kaldes det en fuldt kvalificeret reference. Du har fortalt Excel præcis, hvilken rækkevidde du ønsker, på hvilket regneark og i hvilken projektmappe, og har ikke overladt noget til fantasien. Fantasien er god i mennesker, men ikke så god i computerprogrammer.
Forresten har projektmappenavne også en prik til at adskille filnavnet fra udvidelsen (f.eks. Book1.xlsx). Det er bare en tilfældighed. Prikken i et filnavn har overhovedet intet at gøre med prikoperatoren.
Forenkling af objektreferencer
Hvis du blev forpligtet til fuldt ud at kvalificere hver objektreference, du laver, ville din kode blive ret lang, og den kunne være sværere at læse. Heldigvis giver Excel dig nogle genveje, der kan forbedre læsbarheden (og spare dig for at skrive). Til at begynde med er Application-objektet altid antaget. Der er kun få tilfælde, hvor det giver mening at skrive det. Udeladelse af applikationsobjektreferencen forkorter eksemplet til
Arbejdsbøger(“Book1.xlsx”).Worksheets(1).Range(“A1”).Værdi
Det er en ret god forbedring. Men vent, der er mere. Hvis du er sikker på, at Book1.xlsx er den aktive projektmappe, kan du også udelade denne reference. Nu er du nede på
Arbejdsark(1).Range(“A1”).Værdi
Nu kommer du et sted hen. Har du gættet den næste genvej? Det er rigtigt. Hvis du ved, at det første regneark er det aktuelt aktive regneark, antager Excel denne reference og giver dig mulighed for bare at skrive
Område(“A1”).Værdi
I modsætning til hvad nogle mennesker måske tror, har Excel ikke et celleobjekt. En celle er simpelthen et Range-objekt, der kun består af ét element.
Genvejene beskrevet her er gode, men de kan også være farlige. Hvad hvis du kun tror, at Book1.xlsx er den aktive projektmappe? Du kan få en fejl, eller værre, du kan få den forkerte værdi og ikke engang indse, at den er forkert. Af den grund er det ofte bedst at kvalificere dine objektreferencer fuldt ud.
With-End With-strukturen hjælper dig med at kvalificere dine referencer fuldt ud, men hjælper også med at gøre koden mere læsbar og skærer ned på indtastningen. Det bedste fra begge verdener!