VBA Chroń / Odblokuj arkusze

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

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave