Ten samouczek nauczy Cię wszystkiego o ochronie arkusza kalkulacyjnego Excel w VBA - Jak chronić lub odbezpieczać arkusze kalkulacyjne w programie Excel.
Odblokuj arkusz Excela bez hasła
Aby usunąć ochronę arkusza roboczego, który nie jest chroniony hasłem, użyj tego prostego wiersza kodu:
1 | Arkusze ("Arkusz1"). Odblokuj |
Odblokuj arkusz Excela hasłem
Aby usunąć ochronę arkusza roboczego, który jest chroniony hasłem, musisz również wprowadzić hasło:
1 | Arkusze ("Arkusz1"). Odblokuj "Hasło" |
Odblokuj arkusz - zgubione hasło
Aby usunąć ochronę arkusza roboczego bez znajomości hasła, musisz użyć dodatku do odzyskiwania hasła.
Chroń arkusze robocze
Ochrona arkusza roboczego umożliwia zablokowanie niektórych aspektów arkusza przed edycją.
To menu znajduje się w Strona główna > Format > Chroń arkusz lub klikając prawym przyciskiem myszy nazwę karty Arkusz:
Najczęściej służy to do ochrony „zablokowanych” komórek przed edycją, umożliwiając użytkownikowi końcowemu edycję tylko niektórych komórek.
Możesz zablokować komórki, zaznaczając je i otwierając Zakładka Ochrona z Menu formatowania komórek (CTRL + 1).
Możesz także uniemożliwić użytkownikowi zmianę struktury arkusza (wstawianie, usuwanie lub zmianę rozmiaru wierszy i kolumn), interakcję z autofiltrami i wiele więcej.
Chroń arkusz roboczy - bez hasła
Możesz chronić arkusz roboczy bez wprowadzania hasła. Zapobiegnie to przypadkowym zmianom w arkuszu, dając jednocześnie użytkownikowi dostęp do wprowadzania zmian w razie potrzeby.
1 | Arkusze ("Arkusz1").Chroń |
Chroń arkusz roboczy - Ochrona hasłem
1 | Arkusze ("Arkusz1"). Chroń "Hasło" |
Chroń ustawienia arkusza roboczego
Powyższe przykłady będą chronić Arkusze ze standardowymi ustawieniami ochrony. Zamiast tego możesz chcieć dostosować to, co jest chronione:
12345 | Worksheets("Arkusz1").Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=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 |
Zamiast używać powyższej składni, zalecam nagranie makra z żądanymi ustawieniami (wybranymi w menu Ochrona arkusza roboczego powyżej) i skopiowanie + wklejenie nagranego kodu do procedury.
Chroń arkusz - Zezwól VBA na wprowadzanie zmian
Domyślnie, gdy chronisz arkusz, ochrona ma zastosowanie do operacji VBA oprócz działań użytkownika. Jeśli VBA spróbuje zmodyfikować zablokowaną komórkę, zobaczysz błąd uruchomieniowy 1004. Aby tego uniknąć, możesz wyłączyć ochronę i ponownie chronić swoje arkusze robocze, gdy VBA musi z nimi wchodzić w interakcję:
123456789 | Sub Edycja_Arkusz1()„Nie chroń arkusza 1”Arkusze ("Arkusz1"). Odblokuj„Zrób coś na arkuszu1”'Ponownie chroń arkusz 1Arkusze ("Arkusz1").ChrońNapis końcowy |
Jednak łatwo jest zapomnieć o usunięciu ochrony i/lub ponownym zabezpieczeniu arkuszy. Może to zwiększyć prawdopodobieństwo błędu kodowania.
Zamiast tego możesz użyć ustawienia UserInterFaceOnly. Gdy TRUE, arkusze będą chronione TYLKO przed użytkownikami, NIE przed VBA.Twój kod VBA będzie mógł edytować arkusz roboczy, tak jak gdyby był odblokowany.
Dwie ważne kwestie dotyczące UserInterFaceOnly:
- To ustawienie nie jest dostępne w menu Ochrona arkusza roboczego (pokazane powyżej). To ustawienie, które należy zdefiniować w VBA.
- Ustawienie nie jest zapisywane po zamknięciu skoroszytu. Musi być ponownie zdefiniowany za każdym razem, gdy otwierany jest skoroszyt.
Aby więc ustawić właściwość UserInterFaceOnly, należy umieścić następującą procedurę zdarzenia Workbook_Open w module ThisWorkbook:
1234567 | Prywatny skoroszyt podrzędny_Open()Dim ws As WorksheetDla każdego ws In ThisWorkbook.Worksheetsws.Protect UserInterfaceOnly:=TrueNastępnyNapis końcowy |
Workbook_Open to specjalna procedura zdarzenia, która będzie uruchamiana za każdym razem, gdy skoroszyt jest otwarty. Musi być umieszczony w module ThisWorkbook. Alternatywnie możesz użyć procedury zdarzenia Auto_Open (nie omówione tutaj).
Odblokuj makro wszystkich arkuszy
To makro wyłączy ochronę wszystkich arkuszy w skoroszycie:
123456789 | „Odblokuj wszystkie arkusze”Sub UnProtectAllArkusze()Dim ws As WorksheetDla każdego ws w arkuszach roboczychws.Odbezpiecz „hasło”NastępnyNapis końcowy |
Chroń wszystkie arkusze makro
To makro chroni wszystkie arkusze w skoroszycie:
123456789 | „Chroń wszystkie arkusze”Sub chroń wszystkie arkusze()Dim ws As WorksheetDla każdego ws w arkuszach roboczychws.Protect „hasło”NastępnyNapis końcowy |