Ochrona arkusza w Excelu to nie to samo co szyfrowanie całego pliku. Jeśli zapomniałeś hasła przy Chroń arkusz (Protect Sheet) w skoroszycie, który należy do Ciebie, znana technika VBA - PasswordBreaker - może znaleźć kolizję w słabym 16-bitowym hashu i odblokować arkusz. Metoda nie pomaga przeciw hasłom otwarcia, szyfrowaniu skoroszytu ani plikom, których nie masz prawa zmieniać.
Używaj tego tylko na własnych skoroszytach albo tam, gdzie właściciel poprosił Cię o pomoc. Omijanie ochrony cudzych dokumentów bez zgody jest nielegalne.
Ochrona arkusza a szyfrowanie pliku
Excel ma kilka warstw «hasła» i często się je myli.
Ochrona arkusza ogranicza edycję komórek, formuł, wierszy i kolumn na jednym arkuszu. Microsoft opisuje funkcję w Ochrona arkusza. Hasło ma tu hamować przypadkowe zmiany, nie zapewniać silnej kryptografii. Historycznie wartość kontrolna jest zapisywana jako krótki hash. Dlatego brute-force pod kątem kolizji hashy jest praktycznie wykonalny.
Strukturę skoroszytu też można chronić (blokada kart arkuszy, zakaz wstawiania/usuwania arkuszy). To nadal nie jest szyfrowanie pliku.
Szyfrowanie pliku / hasło otwarcia szyfruje treść tak, że bez właściwego hasła pliku nie da się odczytać. Microsoft dokumentuje to osobno w Ochrona pliku programu Excel. PasswordBreaker i podobne makra nie sięgają tej warstwy. Jeśli zapomniałeś hasła otwarcia, potrzebujesz kopii bez szyfrowania, archiwum haseł albo oficjalnego odzyskiwania dla własnych plików - nie makra arkuszowego z tego artykułu.
Krótko: ochrona arkusza = blokada edycji ze słabym hashem. Szyfrowanie pliku = prawdziwe szyfrowanie. Ten poradnik dotyczy tylko pierwszego.
Dlaczego PasswordBreaker działa: kolizja hasha 16-bitowego
Klasyczna ochrona arkusza nie porównuje hasła znak po znaku z silną tabelą kluczy. Porównuje 16-bitowy hash tego, co wpiszesz, z hashem zapisanym przy ochronie arkusza.
Wartość 16-bitowa ma tylko 65 536 możliwych wyników. Wiele różnych ciągów hasła daje tę samą liczbę. Gdy ActiveSheet.Unprotect dostanie ciąg trafiający w ten sam hash, akceptuje go - nawet jeśli to nie oryginalne hasło.
PasswordBreaker wykorzystuje to praktycznie: makro systematycznie próbuje krótkich kombinacji znaków, aż ProtectContents stanie się False. Potem zgłasza jeden działający ciąg. To kolizja hasha, nie «łamanie» nowoczesnego szyfrowania AES.
To znana, stara właściwość ochrony arkusza. API VBA do odblokowania to Worksheet.Unprotect (dokumentacja). Gdy znasz lub znajdziesz zaakceptowane hasło (albo kolizję), to to samo API, którego używa Excel.
Wymagania przed startem
- Jesteś właścicielem pliku albo masz pisemną/ustną zgodę właściciela.
- Plik otwiera się bez hasła otwarcia (inaczej problemem jest szyfrowanie, nie ochrona arkusza).
- Makra są dozwolone dla tego skoroszytu.
- Masz dostęp do edytora VBA (
Alt+F11w Windows; na Macu: Narzędzia > Makro > Edytor Visual Basic, zależnie od wersji Excela).
Najpierw zrób kopię. Makro zapisuje znaleziony ciąg w komórce A1 pierwszego arkusza. Na kopii nie szkodzi to danym produkcyjnym.
Jak uruchomić PasswordBreaker
- Otwórz plik Excel i aktywuj chroniony arkusz.
- Naciśnij Alt+F11, aby otworzyć edytor VBA.
- Wybierz Wstaw > Moduł.
- Wklej poniższy kod do okna modułu.
- Ustaw kursor wewnątrz
PasswordBreakeri naciśnij F5 (lub Uruchom > Uruchom Sub/UserForm). - Poczekaj, aż okno komunikatu pokaże użyteczny ciąg hasła. Arkusz powinien być już odblokowany.

Sub PasswordBreaker()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 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 i1 = 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(i1) & 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(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
ActiveWorkbook.Sheets(1).Select
Range("a1").FormulaR1C1 = Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
End SubCo robi kod, linia po linii
- Zagnieżdżone pętle
Forbudują ciągi kandydatów z kodów znaków (głównieA/Bna pierwszych pozycjach, potem szerszy zestaw na ostatniej). - Każdy kandydat trafia do
ActiveSheet.Unprotect. - Gdy
ProtectContentsjestFalse, hash został trafiony. Makro pokazuje ciąg i kończy. On Error Resume Nextpomija błędy przy nietrafionych próbach; to oczekiwane podczas wyszukiwania.
Uruchomienie może trwać od kilku sekund do kilku minut, zależnie od maszyny i wersji Excela. Nie musi «znaleźć» oryginalnego hasła - wystarczy jedna kolizja.
Po odblokowaniu: usuń ochronę porządnie
Gdy arkusz jest otwarty, przejdź do Recenzja > Nie chroń arkusza, jeśli przycisk nadal jest aktywny, albo chroń arkusz ponownie hasłem, które zapamiętasz i zapiszesz w menedżerze haseł. Nie licz na to, że ciąg kolizji łatwo zapamiętasz.
Odkrywanie ukrytego arkusza
Odblokowanie ochrony to nie to samo co odkrycie ukrytego arkusza. Jeśli arkusz jest tylko ukryty (nie VeryHidden):
- Na karcie Narzędzia główne, w grupie Komórki, kliknij Format.
- W obszarze Widoczność wybierz Ukryj i odkryj, potem Odkryj arkusz.
- W oknie Odkryj kliknij dwukrotnie nazwę arkusza.
Możesz odkryć tylko jeden arkusz naraz.
Jeśli arkusz ukryto w VBA przez xlSheetVeryHidden, polecenie Odkryj nie zadziała. Trzeba zmienić właściwość w edytorze VBA (Properties arkusza) albo zrobić to właściciel skoroszytu. Nie zakładaj, że PasswordBreaker naprawia VeryHidden - to inny mechanizm.
Uwagi dla Microsoft 365 i nowszego Excela
Microsoft 365 i aktualne buildy Excela (Windows i Mac) nadal obsługują ochronę arkusza i VBA Unprotect dla klasycznych skoroszytów. Praktyczne ograniczenia:
- Bezpieczeństwo makr. Pliki z sieci lub poczty mogą otworzyć się w widoku chronionym. Musisz włączyć edycję i zezwolić na makra we własnej kopii, zanim VBA zadziała.
- Centrum zaufania. Organizacje mogą blokować wszystkie makra polityką. Wtedy IT musi je zezwolić, albo uruchamiasz odzyskiwanie na maszynie, na której masz uprawnienia.
- Mac. VBA jest w Excelu dla Maca, ale skróty i nazwy menu różnią się od Windowsa. Logika
Unprotectjest ta sama. - Excel w sieci / mobilny. Klient web i aplikacje mobilne nie dają pełnego VBA. Użyj Excela desktopowego.
- Silniejsze blokady. Nowsze przepływy jak IRM, etykiety poufności czy prawdziwe szyfrowanie pliku leżą poza tym makrem. Nie oczekuj, że kolizja hasha je otworzy.
Jeśli Unprotect nigdy nie trafia, a plik już przy otwarciu pytał o hasło, masz szyfrowanie pliku - zatrzymaj się i użyj właściwej ścieżki odzyskiwania dla własnych zaszyfrowanych plików.
Typowe błędy i ograniczenia
- Zła warstwa. Próbujesz makra na zaszyfrowanym pliku. Nie pomoże.
- Zły aktywny arkusz. Makro działa na
ActiveSheet. Najpierw aktywuj właściwą kartę. - Zablokowany projekt VBA. Osobne hasło projektu VBA to nie ochrona arkusza. PasswordBreaker tego nie rozwiązuje.
- Udostępniony / tylko do odczytu. Zapisz lokalną kopię, którą możesz zmieniać.
- Oczekiwanie oryginalnego hasła. Okno komunikatu pokazuje kolizję. To wystarczy do odblokowania; nie jest dowodem, co ktoś wpisał w 2019.
Etyka i własność
Technika jest publicznie znana, bo hash ochrony arkusza jest za słaby, by chronić tajemnice. Powstała, by zatrzymać przypadkową edycję, nie by ukrywać dane przed obcymi.
Używaj jej do odzyskania własnych arkuszy - starych budżetów, list magazynowych albo szablonów, których hasło zaginęło. Nie używaj jej przeciw cudzym plikom, skradzionym skoroszytom ani dokumentom, do których masz tylko tymczasowy wgląd. Jeśli ktoś prosi Cię o «odblokowanie» pliku, którego nie posiada, odmów.
Dla tajemnic, które naprawdę muszą zostać tajne: szyfrowanie pliku, kontrola dostępu w SharePoint/OneDrive albo dedykowany magazyn sekretów - nie sama ochrona arkusza.
W polskich firmach skoroszyt często leży na SharePointcie księgowości albo w OneDrive służbowym. Nawet jeśli technicznie odblokujesz arkusz, regulamin może wymagać, by zrobił to właściciel albo IT - zwłaszcza gdy plik jest częścią obiegu faktur lub raportów miesięcznych.
Przykład praktyczny: zapomniane hasło na własnym arkuszu budżetu
Dziedziczysz .xlsx po byłym koledze. Plik otwiera się bez pytania. Formuły widać, ale komórki są zablokowane, a Nie chroń arkusza prosi o hasło, którego nikt nie pamięta. To ochrona arkusza.
Kopiujesz plik do budzet-kopia.xlsx, zezwalasz na makra, wklejasz PasswordBreaker, uruchamiasz na właściwym arkuszu, notujesz ciąg kolizji, zdejmujesz ochronę i zapisujesz bez hasła (albo z nowym w menedżerze haseł). Potem usuwasz moduł makra, jeśli już go nie potrzebujesz, żeby skoroszyt nie dźwigał zbędnego VBA.
Gdyby Excel pytał o hasło już przy dwukliku pliku, zatrzymałbyś się. Wtedy treść jest zaszyfrowana i ten artykuł nie dotyczy sprawy.
Kiedy lepiej zapytać właściciela
Niektóre skoroszyty są częścią systemu księgowego, szablonu umowy albo wspólnej biblioteki SharePoint. Nawet jeśli technicznie możesz odblokować arkusz, wewnętrzne reguły mogą wymagać, by zrobiło to IT lub właściciel. W zespole: udokumentuj, co zrobiłeś (data, nazwa pliku, że to była ochrona arkusza), żeby następna osoba nie myślała, że plik «magicznie» stracił hasło.
Jeśli nie jesteś pewien własności, nie uruchamiaj makra. Poproś o niechroniony eksport albo o to, by właściciel sam zdjął ochronę.
Krótkie podsumowanie
- Potwierdź, że problemem jest ochrona arkusza, nie szyfrowanie pliku.
- Pracuj tylko na własnych (lub autoryzowanych) plikach; zrób kopię.
- Uruchom PasswordBreaker przez VBA, by znaleźć kolizję 16-bitowego hasha.
- Zapisz nowe, zapamiętywalne hasło - albo zdejmij ochronę, jeśli jej nie potrzebujesz.
- Dla plików zaszyfrowanych: inny proces, inne narzędzia, ten sam wymóg własności.
Strony Microsoftu o ochronie arkusza, Worksheet.Unprotect i ochronie pliku są punktami odniesienia, gdy trzeba rozróżnić warstwy.







