Att hänvisa till ett objekt i din VBA-kod är viktigt eftersom du måste identifiera objektet som du vill arbeta med i Excel 2016. VBA kan trots allt inte läsa dina tankar — ännu. Det ryktas att det tankeläsande objektet kommer att introduceras i Excel 2019.
Du kan arbeta med en hel samling objekt i ett svep. Oftare behöver du dock arbeta med ett specifikt objekt i en samling (som ett särskilt kalkylblad i en arbetsbok). För att referera till ett enstaka objekt från en samling, sätter du objektets namn eller indexnummer inom parentes efter namnet på samlingen, så här:
Arbetsblad(“Sheet1”)
Observera att arkets namn står inom citattecken. Om du utelämnar citattecken kommer Excel inte att kunna identifiera objektet (och kommer att anta att det är ett variabelnamn).
Om Sheet1 är det första (eller enda) kalkylbladet i samlingen kan du också använda följande referens:
Arbetsblad(1)
I det här fallet står numret inte inom citattecken. Slutsats? Om du refererar till ett objekt genom att använda dess namn, använd citattecken. Om du hänvisar till ett objekt genom att använda dess indexnummer, använd ett vanligt tal utan citattecken.
Hur är det med diagramblad? Ett diagramblad innehåller ett enda diagram. Den har en arkflik, men det är inte ett kalkylblad. Tja, som det visar sig har objektmodellen en samling som heter Charts. Den här samlingen innehåller alla diagrambladsobjekt i en arbetsbok (och inkluderar inte diagram inbäddade i ett kalkylblad).
Och bara för att hålla saker logiska, det finns en annan samling som heter Sheets. Arksamlingen innehåller alla ark (kalkylblad och diagramblad) i en arbetsbok. Arksamlingen är praktisk om du vill arbeta med alla ark i en arbetsbok och inte bryr dig om de är kalkylblad eller diagramblad.
Så ett enda kalkylblad som heter Sheet1 är medlem i två samlingar: Kalkylbladssamlingen och Kalkylarksamlingen. Du kan referera till det på något av två sätt:
Arbetsblad(“Sheet1”)
Sheets(“Sheet1”)
Navigerar genom hierarkin
Om du vill arbeta med Excel-objekt finns alla under Application-objektet. Så börja med att skriva Application .
Alla andra objekt i Excels objektmodell ligger under Application-objektet. Du kommer till dessa objekt genom att flytta ner i hierarkin och koppla ihop varje objekt på vägen med punktoperatorn (.). För att komma till Workbook-objektet med namnet Book1.xlsx, börja med Application-objektet och navigera ner till Workbooks-samlingsobjektet:
Application.Workbooks(“Book1.xlsx”)
För att navigera längre till ett specifikt kalkylblad, lägg till en punktoperator och öppna samlingsobjektet Kalkylblad:
Application.Workbooks(“Book1.xlsx”).Arbetsblad(1)
Inte tillräckligt långt än? Om du verkligen vill få värdet från cell A1 på det första kalkylbladet i arbetsboken med namnet Book1.xlsx, måste du navigera ytterligare en nivå till Range-objektet:
Application.Workbooks(“Book1.xlsx”).Worksheets(1).Range(“A1”).Värde
När du refererar till ett Range-objekt på det här sättet kallas det en fullständigt kvalificerad referens. Du har sagt till Excel exakt vilket intervall du vill ha, på vilket kalkylblad och i vilken arbetsbok, och har inte lämnat något åt fantasin. Fantasi är bra hos människor men inte så bra i datorprogram.
Förresten, arbetsboksnamn har också en punkt för att skilja filnamnet från tillägget (till exempel Book1.xlsx). Det är bara en slump. Punkten i ett filnamn har ingenting alls att göra med punktoperatorn.
Förenkla objektreferenser
Om du var tvungen att fullständigt kvalificera varje objektreferens du gör, skulle din kod bli ganska lång och den kan vara svårare att läsa. Lyckligtvis ger Excel dig några genvägar som kan förbättra läsbarheten (och spara lite skrivning). Till att börja med antas alltid Application-objektet. Det finns bara ett fåtal fall när det är vettigt att skriva det. Om du utelämnar applikationsobjektreferensen förkortas exemplet till
Workbooks(“Book1.xlsx”).Arbetsblad(1).Range(“A1”).Värde
Det är en ganska bra förbättring. Men vänta, det finns mer. Om du är säker på att Book1.xlsx är den aktiva arbetsboken kan du också utelämna den referensen. Nu är du nere på
Arbetsblad(1).Omfång(“A1”).Värde
Nu kommer du någonstans. Har du gissat nästa genväg? Det är rätt. Om du vet att det första kalkylbladet är det för närvarande aktiva kalkylbladet, antar Excel den referensen och låter dig bara skriva
Range(“A1”).Värde
I motsats till vad vissa kanske tror, har Excel inte ett cellobjekt. En cell är helt enkelt ett Range-objekt som bara består av ett element.
Genvägarna som beskrivs här är bra, men de kan också vara farliga. Vad händer om du bara tror att Book1.xlsx är den aktiva arbetsboken? Du kan få ett fel, eller ännu värre, du kan få fel värde och inte ens inse att det är fel. Av den anledningen är det ofta bäst att fullständigt kvalificera dina objektreferenser.
With-End With-strukturen hjälper dig att fullt ut kvalificera dina referenser men hjälper också till att göra koden mer läsbar och minskar inskrivningen. Det bästa av båda världar!