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 |