VBA Sheets - Den ultimata guiden

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 Cheatsheet
BeskrivningKodexempel
Referera och aktivera blad
FliknamnArk ("Inmatning"). Aktivera
VBA -kodnamnBlad 1.Aktivera
IndexpositionArk (1) .Aktivera
Välj Ark
Välj ArkArk ("Inmatning"). Välj
Ställ in på variabelDim ws som arbetsblad
Ange ws = ActiveSheet
Namn / Byt namnActiveSheet.Name = "Nytt namn"
Nästa bladActiveSheet.Next.Activate
Slinga igenom alla arkDim ws som arbetsblad
För varje vecka i kalkylblad
Msgbox ws.name
Nästa ws
Slinga igenom utvalda arkDim ws Som arbetsblad
För varje ws i ActiveWindow.SelectedSheets
MsgBox ws.Name
Nästa ws
Skaffa ActiveSheetMsgBox ActiveSheet.Name
Lägg till bladArk. Lägg till
Lägg till blad och namnSheets.Add.Name = "NewSheet"
Lägg till blad med namn från cellSheets.Add.Name = intervall ("a3"). Värde
Lägg till ark efter det andraSheets.Add After: = Sheets ("Inmatning")
Lägg till blad efter och namnSheets.Add (After: = Sheets ("Input")). Name = "NewSheet"
Lägg till blad före och namnSheets.Add (Before: = Sheets ("Input")). Name = "NewSheet"
Lägg till blad i arbetsbokens slutSheets.Add After: = Sheets (Sheets.Count)
Lägg till blad i början av arbetsbokenSheets.Add (Before: = Sheets (1)). Name = "FirstSheet"
Lägg till blad i variabelDim ws Som arbetsblad
Ange ws = Sheets.Add
Kopiera arbetsblad
Flytta blad till arbetsbokens slutSheets ("Sheet1"). Flytta efter: = Sheets (Sheets.Count)
Till ny arbetsbokArk ("Ark1"). Kopiera
Valda blad till ny arbetsbokActiveWindow.SelectedSheets.Copy
Före ett annat bladSheets ("Sheet1"). Kopiera före: = Sheets ("Sheet2")
Före första bladetSheets ("Sheet1"). Kopiera före: = Sheets (1)
Efter sista bladetSheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)
Kopiera och namnSheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)
ActiveSheet.Name = "LastSheet"
Kopiera och namn från cellvärdeSheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)
ActiveSheet.Name = Range ("A1"). Värde
Till en annan arbetsbokSheets ("Sheet1"). Kopiera före: = Workbooks ("Exempel.xlsm"). Sheets (1)
Dölj / ta bort ark
Dölj bladArk ("Ark1"). Synlig = falskt
eller
Sheets ("Sheet1"). Visible = xlSheetHidden
Unhide SheetSheets ("Sheet1"). Visible = True
eller
Sheets ("Sheet1"). Visible = xlSheetVisible
Very Hide SheetSheets ("Sheet1"). Visible = xlSheetVeryHidden
Ta bort eller rensa blad
Ta bort bladArk ("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 arkArk ("Sheet1"). Cells.Clear
Endast tydligt arkinnehållSheets ("Sheet1"). Cells.ClearContents
Tydligt ark UsedRangeSheets ("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 -åtkomstSheets ("Sheet1"). Skydda UserInterfaceOnly: = True
Skydda alla bladDim ws Som arbetsblad
För varje ws i kalkylblad
ws.Unprotect "lösenord"
Nästa ws
wave wave wave wave wave