VBA-kod som lösenordsskyddar blad
Med hjälp av lite enkel makrokod i VBA kan vi förhindra generell åtkomst till vissa blad i en arbetsbok i Excel.
För att komma åt dessa skyddade blad krävs att användaren skriver in ett lösenord.
Konstigt nog så har Microsoft aldrig byggt in denna funktionalitet i Excel, utan vi måste istället programmera funktionen själva.
Glöm inte att begrunda nedanstående resonemang om säkerhet, då hantering av känslig information är just ett känsligt tema som kräver eftertanke.
Vi använder oss av händelsen Workbook_SheetActivate
Workbook_SheetActivate är en händelse som triggas varje gång som ett arbetsblad aktiveras, dvs när användaren klickar på bladet. Om aktuellt blad ingår i listan över blad som vi vill lösenordsskydda så kommer Excel att be oss att ange ett lösen. Om fel lösenord anges så hoppar Excel tillbaka till det sist aktiva arbetsbladet.
Vissa säkerhetsaspekter på lösenordsskyddade kalkylblad
Det här makrot skall inte användas för att dölja känslig information då det finns en del knep för att kringgå skyddet. Kom ihåg att det bästa sättet att skydda information är att över huvud taget inte distribuera den.
För det första så kommer det lösenord som vi sätter att stå i klartext i VBA-koden. Detta kan vi emellertid åtgärda på ett hyfsat säkert sätt genom att lösenordsskydda VBA-koden (VBA-editorn – Högerklick på aktuell arbetsbok – VBAProject Properties/Egenskaper). Men man skall också vara medveten om att det finns program som knäcker VBAs kodmodul-skydd.
För det andra så kan det skyddade bladet synas under en mycket kort ögonblick som kanske en tiondels sekund innan inputboxen för lösenordet visas. Gäller främst långsammare datorer.
Ovanstående kombinerat med det faktum att det även finns andra sätt att kringå den här varianten av kalkylbladsskydd gör att man får tänka efter vilken typ av information som är lämplig att skydda på det här sättet.
VBA-rutin för att lösenordsskydda åtkomst till vissa kalkylblad
I vilket fall som helst så finns det en hel del fall där vi helt enkelt vill kunna stoppa undan kalkylblad lite mer “permanent” än att bara gömma dem på sedvanligt sätt.
Följande kod skall läggas i ThisWorkbook-objektet i VBA-editorn. I exemplet så utgår vi från att “Sheet2” och “Sheet3” skall skyddas med lösenords-strängen “gladalaxen”.
Dim strStartBlad As String Dim strNastaBlad As String Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim z As Integer Dim i As Integer Dim x As Boolean Dim varArbetsBlad As Variant Dim varLosenOrd As Variant Dim varInput As Variant 'förbereda modellen varArbetsBlad = Array("Sheet2", "Sheet3") 'de blad som vi vill skydda... varLosenOrd = "gladalaxen" 'lösenord... [bokstäver/siffror] 'slå ifrån "Events" Application.EnableEvents = False 'bladkontroll strNastaBlad = Sh.Name For i = LBound(varArbetsBlad) To UBound(varArbetsBlad) If varArbetsBlad(i) = strNastaBlad Then x = True Next i If x = False Then GoTo 99 'döljer arbetsbladet temporärt z = ActiveWindow.Index Windows(z).Visible = False 'utvärderar lösenordet varInput = InputBox("Lösen:") If varInput <> varLosenOrd Then Sheets(strStartBlad).Select 'visa bladet Windows(z).Visible = True 99: 'slå på "Events" Application.EnableEvents = True End Sub |
För att koden skall hitta tillbaka till det oskyddade bladet ifall användaren skriver fel lösenord så lägger vi in namnet på det oskyddade bladet i en variabel så fort som detta blad av-aktiveras:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 'minnas startbladet strStartBlad = Sh.Name End Sub |