Start » VBA-exempel för Excel | Effektiva lösningar på konkreta problem » Kalkylbladsstruktur » VBA-kod som lösenordsskyddar kalkylblad

VBA-kod som lösenordsskyddar kalkylblad





skydda-arbetsblad-atkomst

Utgångsläget för den Excelbok där vi tänkt lösenordsskydda åtkomst till det andra och det tredje bladet.

Med hjälp av lite enkel makrokod i VBA så kan vi förhindra generell åtkomst till vissa av bladen 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önstret i Excels VBA-editor där du lösenordsskyddar VBA-projektet.

Fönstret i Excels VBA-editor där du lösenordsskyddar VBA-projektet.

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 gömma 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




En kommentar till “VBA-kod som lösenordsskyddar kalkylblad”

  1. Magnus

    Hej!

    En jättefiffig kod att använda och som jag saknat! MEN…
    …om jag prövar att avbryta inloggningen på det lösenordsskyddade bladet (fliken) så försvinner alla kalkylblad och Excel hänger sig så till den milda grad att jag är tvungen att använda ctrl+alt+delete för att avsluta programmet! Något verkar bli fel i hänvisningen tillbaka…

Lämna en kommentar