Detta är den ultimata guiden för att arbeta med Sheets / Worksheets i Excel.
Längst ner i den här guiden har vi skapat ett fuskblad med vanliga kommandon för att arbeta med blad.
Sheets Vs. Arbetsblad
Det finns två sätt att referera till Kalkylark med VBA. Den första är med objektet Sheets:
1 | Ark ("Ark1"). Aktivera |
Den andra är med Worksheets -objektet:
1 | Arbetsblad ("Ark1"). Aktivera |
99% av tiden är dessa två objekt identiska. Faktum är att om du har sökt efter exempel på VBA -kod online har du förmodligen sett båda objekten som används. Här är skillnaden:
Sheets Collection innehåller kalkylblad och diagramark.
Så använd Kalkylark om du vill inkludera vanliga kalkylblad OCH sjökort. Använd kalkylblad om du vill utesluta diagramark. För resten av den här guiden kommer vi att använda ark och arbetsblad omväxlande.
Referensblad
Det finns flera olika sätt att referera till Kalkylark:
- ActiveSheet
- Arkflikflikens namn
- Bladindexnummer
- Bladkodens namn
ActiveSheet
ActiveSheet är det blad som för närvarande är aktivt. Med andra ord, om du pausade din kod och tittade på Excel är det arket som är synligt. Nedanstående kodexempel visar en meddelandefält med ActiveSheet -namnet.
1 | MsgBox ActiveSheet.Name |
Arkets namn
Du är förmodligen mest bekant med att referera till blad efter deras fliknamn:
1 | Kalkylark ("Fliknamn"). Aktivera |
Bladindexnummer
Bladindexnumret är bladpositionen i arbetsboken. 1 är det första bladet. 2 är det andra bladet etc.:
1 | Ark (1) .Aktivera |
Bladindexnummer - Sista bladet i arbetsboken
För att referera till det sista bladet i arbetsboken, använd Sheets.Count för att få det sista indexnumret:
1 | Ark (Sheets.Count) .Aktivera |
Ark "Kodnamn"
Bladkodens namn är dess objektnamn i VBA:
1 | CodeName.Activate |
Referensblad i andra arbetsböcker
Det är också lätt att referera till blad i andra arbetsböcker. För att göra det måste du använda Workbooks Object:
1 | Arbetsböcker ("VBA_Examples.xlsm"). Arbetsblad ("Ark1"). Aktivera |
Viktig: Arbetsboken måste vara öppen innan du kan referera till dess blad.
Aktivera kontra Välj blad
I en annan artikel diskuterar vi allt om att aktivera och välja ark. Den korta versionen är följande:
När du aktiverar ett blad blir det ActiveSheet. Detta är det blad du skulle se om du tittade på ditt Excel -program. Endast ett ark kan aktiveras åt gången.
Aktivera ett blad
1 | Ark ("Ark1"). Aktivera |
När du väljer ett blad blir det också ActiveSheet. Du kan dock välja flera ark samtidigt. När flera ark väljs samtidigt är det "översta" arket ActiveSheet. Du kan dock växla ActiveSheet inom valda blad.
Välj ett blad
1 | Ark ("Ark1"). Välj |
Välj flera ark
Använd en array för att välja flera ark samtidigt:
1 | Arbetsblad (Array ("Sheet2", "Sheet3")). Välj |
Arbetsblad Variabel
Tilldela ett kalkylblad till en variabel så att du kan referera till kalkylbladet med dess variabelnamn. Detta kan spara mycket skrivning och göra din kod lättare att läsa. Det finns också många andra anledningar till att du vill använda variabler.
Så här deklarerar du en kalkylvariabel:
1 | Dim ws som kalkylblad |
Tilldela en variabel ett kalkylblad:
1 | Ange ws = Sheets ("Sheet1") |
Nu kan du referera till kalkylbladsvariabeln i din kod:
1 | ws.Aktivera |
Slinga igenom alla blad i arbetsboken
Arbetsbladsvariabler är viktiga när du vill bläddra igenom alla kalkylblad i en arbetsbok. Det enklaste sättet att göra detta är:
12345 | Dim ws som arbetsbladFör varje vecka i kalkylbladMsgBox ws.nameNästa ws |
Den här koden går igenom alla kalkylblad i arbetsboken och visar varje kalkylblads namn i en meddelanderuta. Att bläddra igenom alla blad i en arbetsbok är mycket användbart när du låser / låser upp eller döljer / döljer flera kalkylblad samtidigt.
Arbetsbladskydd
Arbetsbokskydd
Arbetsbokskydd låser arbetsboken från strukturella förändringar som att lägga till, ta bort, flytta eller dölja kalkylblad.
Du kan aktivera arbetsbokskydd med VBA:
1 | ActiveWorkbook.Protect Password: = "Lösenord" |
eller inaktivera arbetsbokskydd:
1 | ActiveWorkbook.UnProtect Password: = "Lösenord" |
Obs! Du kan också skydda / avskydda utan lösenord genom att utelämna lösenordsargumentet:
1 | ActiveWorkbook.Protect |
Arbetsbladskydd
Skydd på arbetsbladsnivå förhindrar ändringar av enskilda kalkylblad.
Skydda kalkylblad
1 | Arbetsblad ("Ark1"). Skydda "Lösenord" |
Oskydda kalkylblad
1 | Arbetsblad ("Ark1"). Skydda "Lösenord" |
Det finns en mängd olika alternativ när du skyddar kalkylblad (tillåt formateringsändringar, tillåt användaren att infoga rader, etc.) Vi rekommenderar att du använder makroinspelaren för att spela in dina önskade inställningar.
Vi diskuterar kalkylbladsskydd mer detaljerat här.
Arbetsblad Synlig egendom
Du kanske redan vet att kalkylblad kan döljas:
Det finns faktiskt tre inställningar för kalkylbladets synlighet: Synlig, dold och Mycket dolt.Dolda ark kan döljas av alla vanliga Excel -användare - genom att högerklicka i flikområdet för kalkylbladet (visas ovan). VeryHidden -blad kan endast döljas med VBA -kod eller från VBA -redigeraren. Använd följande kodexempel för att dölja / avslöja kalkylblad:
Ta bort kalkylblad
1 | Arbetsblad ("Sheet1"). Visible = xlSheetVisible |
Dölj arbetsblad
1 | Arbetsblad ("Ark1"). Synlig = xlSheetHidden |
Mycket dölj arbetsblad
1 | Arbetsblad ("Sheet1"). Visible = xlSheetVeryHidden |
Händelser på arbetsbladsnivå
Händelser är utlösare som kan få "Händelseprocedurer" att köras. Till exempel kan du få koden att köras varje gång någon cell i ett kalkylblad ändras eller när ett kalkylblad aktiveras.
Arbetsbladshändelseprocedurer måste placeras i en kalkylbladsmodul:
Det finns många arbetsbladshändelser. För att se en fullständig lista, gå till en kalkylbladsmodul, välj "Arbetsblad" från den första rullgardinsmenyn. Välj sedan en händelseprocedur från den andra rullgardinsmenyn för att infoga den i modulen.
Arbetsblad Aktivera händelse
Arbetsblad aktiverar händelser som körs varje gång kalkylbladet öppnas.
123 | Private Sub Worksheet_Activate ()Område ("A1"). VäljAvsluta Sub |
Denna kod markerar cell A1 (återställer visningsområdet högst upp till vänster i kalkylbladet) varje gång kalkylbladet öppnas.
Ändring av arbetsblad
Händelser för ändringar av kalkylblad körs när ett cellvärde ändras i kalkylbladet. Läs vår handledning om ändringar av kalkylblad för mer information.
Arbetsblad fuskblad
Nedan hittar du ett fuskblad som innehåller vanliga kodexempel för att arbeta med blad i VBA
VBA Worksheets Cheatsheet
VBA -arbetsblad CheatsheetBeskrivning | Kodexempel |
---|---|
Referera och aktivera blad | |
Fliknamn | Ark ("Inmatning"). Aktivera |
VBA -kodnamn | Blad 1.Aktivera |
Indexposition | Ark (1) .Aktivera |
Välj Ark | |
Välj Ark | Ark ("Inmatning"). Välj |
Ställ in på variabel | Dim ws som arbetsblad Ange ws = ActiveSheet |
Namn / Byt namn | ActiveSheet.Name = "Nytt namn" |
Nästa blad | ActiveSheet.Next.Activate |
Slinga igenom alla ark | Dim ws som arbetsblad För varje vecka i kalkylblad Msgbox ws.name Nästa ws |
Slinga igenom utvalda ark | Dim ws Som arbetsblad För varje ws i ActiveWindow.SelectedSheets MsgBox ws.Name Nästa ws |
Skaffa ActiveSheet | MsgBox ActiveSheet.Name |
Lägg till blad | Ark. Lägg till |
Lägg till blad och namn | Sheets.Add.Name = "NewSheet" |
Lägg till blad med namn från cell | Sheets.Add.Name = intervall ("a3"). Värde |
Lägg till ark efter det andra | Sheets.Add After: = Sheets ("Inmatning") |
Lägg till blad efter och namn | Sheets.Add (After: = Sheets ("Input")). Name = "NewSheet" |
Lägg till blad före och namn | Sheets.Add (Before: = Sheets ("Input")). Name = "NewSheet" |
Lägg till blad i arbetsbokens slut | Sheets.Add After: = Sheets (Sheets.Count) |
Lägg till blad i början av arbetsboken | Sheets.Add (Before: = Sheets (1)). Name = "FirstSheet" |
Lägg till blad i variabel | Dim ws Som arbetsblad Ange ws = Sheets.Add |
Kopiera arbetsblad | |
Flytta blad till arbetsbokens slut | Sheets ("Sheet1"). Flytta efter: = Sheets (Sheets.Count) |
Till ny arbetsbok | Ark ("Ark1"). Kopiera |
Valda blad till ny arbetsbok | ActiveWindow.SelectedSheets.Copy |
Före ett annat blad | Sheets ("Sheet1"). Kopiera före: = Sheets ("Sheet2") |
Före första bladet | Sheets ("Sheet1"). Kopiera före: = Sheets (1) |
Efter sista bladet | Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count) |
Kopiera och namn | Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count) ActiveSheet.Name = "LastSheet" |
Kopiera och namn från cellvärde | Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count) ActiveSheet.Name = Range ("A1"). Värde |
Till en annan arbetsbok | Sheets ("Sheet1"). Kopiera före: = Workbooks ("Exempel.xlsm"). Sheets (1) |
Dölj / ta bort ark | |
Dölj blad | Ark ("Ark1"). Synlig = falskt eller Sheets ("Sheet1"). Visible = xlSheetHidden |
Unhide Sheet | Sheets ("Sheet1"). Visible = True eller Sheets ("Sheet1"). Visible = xlSheetVisible |
Very Hide Sheet | Sheets ("Sheet1"). Visible = xlSheetVeryHidden |
Ta bort eller rensa blad | |
Ta bort blad | Ark ("Ark1"). Radera |
Radera blad (felhantering) | Vid fel Återuppta nästa Ark ("Ark1"). Radera Vid fel GoTo 0 |
Ta bort blad (ingen fråga) | Application.DisplayAlerts = Falskt Ark ("Ark1"). Radera Application.DisplayAlerts = True |
Tydligt ark | Ark ("Sheet1"). Cells.Clear |
Endast tydligt arkinnehåll | Sheets ("Sheet1"). Cells.ClearContents |
Tydligt ark UsedRange | Sheets ("Sheet1"). UsedRange.Clear |
Skydda eller avskydda ark | |
Avskydda (inget lösenord) | Ark ("Ark1"). Oskyddat |
Avskydda (lösenord) | Kalkylark ("Ark1"). Skydda "Lösenord" |
Skydda (inget lösenord) | Ark ("Ark1"). Skydda |
Skydda (lösenord) | Ark ("Ark1"). Skydda "Lösenord" |
Skydda men tillåt VBA -åtkomst | Sheets ("Sheet1"). Skydda UserInterfaceOnly: = True |
Skydda alla blad | Dim ws Som arbetsblad För varje ws i kalkylblad ws.Unprotect "lösenord" Nästa ws |