Avainsana-arkisto: Excel

Excel taulukon suojauksen poistaminen – tapa 2

Olen aiemmin esittänyt tavan poistaa Excel taulukon solujen suojauksen Visual Basic koodin avulla. Ajoittain tämä ei kuitenkaan syystä tai toisesta toimi.

On olemassa toinenkin tapa, jolla suojauksen saa poistettua. Tämä vaihtoehto ei vaadi koodin ajamista, mutta paria kikkaa ja tekstieditoria. Mikäli Excelin avaamien on suojattu salasanalla, ei tästä kikasta ole hyötyä.

On vaikea sanoa, kumpi näistä vaihtoehdoista on helpompi toteuttaa. Uusi tapa oikein toteutettuna on varmatoiminen solujen suojauksen poistamiseksi, eikä koneella tarvitse suorittaa tuntematonta koodia.

Tässä vaiheet:

  1. Tee varmuuskopio!
  2. Uudelleennimeä tiedostopääte .xlsx => .zip
  1. Avaa zip-tiedosto (esim. 7-zip:llä)
  2. Avaa hakemisto /xl/worksheets/
  3. Hakemisto sisältää Excelin välilehdet (sheets)
  1. Avaa välilehdet, joista haluat poistaa suojauksen (esim. sheet1.xml)
  2. Etsi <sheetProtection algorithmName=”SHA-512″ hashValue=”……” /> ja poista tämä
  1. Tallenna muutokset (siten, että muutokset päivittyvät zip-tiedostoon)
  1. Lopuksi muuta tiedostopääte takaisin .zip => .xlsx
  2. Solujen ja kaavojen lukitukset on nyt poistettu

Excel taulukon suojauksen poistaminen

Välillä vastaan tulee Excel-tiedostoja, joiden sisältö on suojattu siten, että kenttien laskentakaavoja ei näe, ja että vain tiettyjen kenttien sisältöä voi muokata.

Tällaiselle suojaamiselle on hyvät perusteet, esimerkiksi matkalaskulomakkeessa. Käyttäjän tarvitsee täyttää tietyt kentät, eikä muuhun tarvitse koskea. Suojaus estää tahattomien muutosten tekemisen, kun kaikkien kenttien sisältöä ei pääse muokkaamaan.

Syystä tai toisesta, edellisen työpaikan käyttämän kirjanpitotoimiston toimittamissa matkalaskulomakkeissa oli ainakin kahtena eri vuonna virheitä. Esimerkiksi matkustajan kilometrit laskettiin täysin väärin (summattiin eri päivien matkustajamäärät yhteen, sama tehtiin kilometreille, ja näiden lopputulos kerrottiin keskenään). Välillä lomakkeissa oli käytössä väärät kilometrikorvaus tai päiväraha summat. Lomakkeet eivät myöskään taipuneet ulkomaanpäivärahoihin.

Näin keskeneräistä ja testaamatonta tekelettä, josta pyydetään vielä rahaa, ei koskaan pitäisi päästää ulos. Vaikka lomakkeessa oli virheitä, oli se muutoin kuitenkin ihan asiallinen. Lomake jäi käyttöön, vaikka tilitoimisto vaihtui. Tällaista lomaketta pystyy käyttämään vain vuoden loppuun, sillä verottaja päivittää korvauksien suuruuksia vuosittain.

Vastaavan lomakkeen voisi tehdä helposti itsekin, mutta pelkkien eurojen päivittämisen takia tämä tuntuu vähän turhalta.

Pienellä pätkällä Visual Basic -koodia, on mahdollista ’selvittää’ salasana, jolla taulukon suojauksen saa poistettua. VB koodi ei murra alkuperäistä salasanaa, se vain etsii sellaisen merkkijonon, joka toimii suojauksen poistamiseen. Tällä tavoin selvitetyt koodit ovat kirjaimellisesti muotoa AAAAAAAAAAA, AAAAAAABBBB, AAAABBBBBCC jne.

Excelin lukitus ei siis ole mikään hienostunein. Täten Excelillä ei kannata tehdä mitään Top Secret juttuja, mikäli tarkoituksena on myös jaella tiedostoa.

Salasanan selvittäminen

Alla oleva koodi ei ole itseni keksimä, vaan se löytyy monesta paikkaa internetin syövereistä.

Koodin käyttö tapahtuu seuraavasti:

1. Avaa VBA editori painamalla Alt + F11 avonaisessa Excel-asiakirjassa, jonka taulun suojauksen haluat poistaa.

2. Tupla klikkaa taulukkoa ikkunan vasemmalla laidalla, jonka suojauksen haluat poistaa. Tässä esimerkissä poistetaan Taulun 11 suojaus. Suojauksen poistaminen tällä metodilla pitää tehdä jokaiselle taululle erikseen.

3. Lisää alla oleva koodi oikealle puolelle avautuneeseen ikkunaan

Sub Passwordbreaker()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim il As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For il = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(il) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(il) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub

4. Koodin lisäämisen jälkeen, paina vihreää ’play’ painiketta (tai paina F5). Pian tämän jälkeen ilmestyy salasana, jota voi käyttää asiakirjan suojauksen poistamiseen.

Suojauksen poistaminen

Asiakirjan suojaus poistetaan valitsemalla Tarkista => Poista taulukon suojaus, ja syöttämällä salasanakentän äsken saatu salasana.

Huomaathan, että tämä VB -koodi täytyy suorittaa jokaiselle taululle erikseen. Esimerkkitiedostossa on 13 taulua, joten koodi pitää ajaa kullekin taululle salasanan selvittämiseksi, ja vielä erikseen poistaa suojaukset kultakin taululta löytynyttä salasanaa käyttäen.

PS. Mikäli tämä kikka ei toiminut (syystä tai toisesta välillä näin käy), voit kokeilla myös toista tapaa.