VBA Protect / Unprotect Worksheets

Denna handledning lär dig allt om Excel -kalkylbladskydd i VBA - Hur du skyddar eller avskyddar kalkylblad i Excel.

Skydda Excel -kalkylbladet utan lösenord

För att avskydda ett kalkylblad som inte är lösenordsskyddat använder du denna enkla kodrad:

1 Arbetsblad ("Ark1"). Skydda inte

Skydda Excel -kalkylbladet med lösenord

För att avskydda ett kalkylblad som är lösenordsskyddat måste du också ange lösenordet:

1 Arbetsblad ("Ark1"). Skydda "Lösenord"

Oskyddat blad - förlorat lösenord

För att avskydda ett kalkylblad utan att känna till lösenordet måste du använda ett tillägg för återställning av lösenord.

Skydda kalkylblad

Arbetsbladskydd låter dig låsa vissa aspekter av arket från redigering.

Denna meny finns i Hem> Format> Skydda blad eller genom att högerklicka på fliknamnet Ark:

Vanligtvis används detta för att skydda "Låsta" celler från redigering, så att endast slutanvändaren kan redigera vissa celler.

Du kan låsa celler genom att markera dem och öppna Fliken Skydd av Meny för cellformatering (CTRL + 1).

Du kan också förhindra att användaren ändrar kalkylbladets struktur (infoga, ta bort eller ändra storlek på rader och kolumner) eller interagera med autofilter och mycket mer.

Skydda kalkylblad - Utan lösenord

Du kanske vill skydda ett kalkylblad utan att ange ett lösenord. Detta förhindrar oavsiktliga ändringar av kalkylbladet, samtidigt som användaren får tillgång till ändringar om så önskas.

1 Arbetsblad ("Sheet1"). Skydda

Skydda kalkylblad - Lösenordsskydd

1 Arbetsblad ("Ark1"). Skydda "Lösenord"

Skydda kalkylbladets inställningar

Ovanstående exempel skyddar kalkylblad med standardskyddsinställningarna. Istället kanske du vill anpassa det som är skyddat:

12345 Arbetsblad ("Sheet1"). Skydda lösenord: = strPassword, DrawingObjects: = True, Innehåll: = True, Scenarier: = True, _UserInterfaceOnly: = True, AllowFormattingCells: = False, AllowFormattingColumns: = False, _AllowFormattingRows: = False, AllowInsertingColumns: = False, AllowInsertingRows: = False, _AllowInsertingHyperlinks: = False, AllowDeletingColumns: = False, AllowDeletingRows: = False, _AllowSorting: = False, AllowFiltering: = False, AllowUsingPivotTables: = False

Istället för att använda syntaxen ovan rekommenderar jag att du spelar in ett makro med dina önskade inställningar (valt med menyn Arbetsbladskydd ovan) och kopierar + klistrar in den inspelade koden i din procedur.

Skydda blad - Låt VBA göra ändringar

Som standard, när du skyddar ett ark, gäller skyddet för VBA -operationer utöver användaråtgärder. Om VBA försöker ändra en låst cell ser du ett körtidsfel 1004. För att undvika detta kan du avskydda och skydda dina kalkylblad när VBA behöver interagera med dem:

123456789 Sub Edit_Sheet1 ()'Oskyddsark 1Arbetsblad ("Ark1"). Skydda inte'Gör något mot blad 1'Skydda blad 1Arbetsblad ("Sheet1"). SkyddaAvsluta Sub

Det är dock lätt att glömma att avskydda och/eller skydda dina kalkylblad igen. Detta kan öka sannolikheten för ett kodningsfel.

Istället kan du använda inställningen UserInterFaceOnly. När det är SANT kommer arbetsblad ENDAST att skyddas från användare, INTE från VBA.Din VBA -kod kommer att vara gratis att redigera kalkylbladet precis som om det var olåst.

Två viktiga punkter om UserInterFaceOnly:

  • Den här inställningen är inte tillgänglig från menyn Arbetsbladskydd (visas ovan). Det är en inställning som måste definieras i VBA.
  • Inställningen sparas inte när du stänger en arbetsbok. Det måste definieras om varje gång en arbetsbok öppnas.

Så för att ställa in egenskapen UserInterFaceOnly bör du placera följande procedur för Workbook_Open -händelse i ThisWorkbook -modulen:

1234567 Private Sub Workbook_Open ()Dim ws Som arbetsbladFör varje gång i ThisWorkbook.Worksheetsws.Protect UserInterfaceOnly: = TrueNästa wsAvsluta Sub

Workbook_Open är en speciell händelseprocedur som körs varje gång arbetsboken är öppen. Den måste placeras i ThisWorkbook -modulen. Alternativt kan du använda Auto_Open -händelseproceduren (täcks inte här).

Avskydda alla ark Makro

Detta makro kommer att avskydda alla blad i en arbetsbok:

123456789 'Avskydda alla kalkylbladSub UnProtectAllSheets ()Dim ws Som arbetsbladFör varje ws i kalkylbladws.Unprotect "lösenord"Nästa wsAvsluta Sub

Skydda alla ark Makro

Detta makro skyddar alla blad i en arbetsbok:

123456789 'Skydda alla kalkylbladSub ProtectAllSheets ()Dim ws Som arbetsbladFör varje ws i kalkylbladws.Protect "lösenord"Nästa wsAvsluta Sub

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave