Tento tutoriál vás naučí vše o ochraně listu aplikace Excel ve VBA - Jak chránit nebo odemknout listy v aplikaci Excel.
Zrušte ochranu listu aplikace Excel bez hesla
Chcete-li zrušit ochranu listu, který není chráněn heslem, použijte tento jednoduchý řádek kódu:
1 | Pracovní listy („List1“). Zrušte ochranu |
Zrušte ochranu listu aplikace Excel heslem
Chcete-li zrušit ochranu listu chráněného heslem, musíte také zadat heslo:
1 | Pracovní listy („List1“). Zrušte ochranu „hesla“ |
Odemknout list - Ztracené heslo
Chcete-li odemknout list bez znalosti hesla, musíte použít doplněk pro obnovení hesla.
Chraňte pracovní listy
Ochrana listu umožňuje zamknout určité aspekty listu před editací.
Toto menu najdete v Domů> Formát> Chránit list nebo kliknutím pravým tlačítkem na název karty List:
Nejčastěji se to používá k ochraně „Zamčených“ buněk před úpravami, což koncovému uživateli umožňuje upravit pouze určité buňky.
Buňky můžete zamknout jejich výběrem a otevřením souboru Záložka ochrany z Nabídka formátování buněk (CTRL + 1).
Můžete také zabránit uživateli ve změně struktury listu (vkládání, mazání nebo změna velikosti řádků a sloupců) nebo v interakci s AutoFilters a mnoho dalšího.
Chraňte pracovní list - bez hesla
Možná budete chtít list chránit bez zadávání hesla. Tím se zabrání nechtěným změnám v listu a zároveň se uživateli poskytne přístup k provedení změn, pokud je to žádoucí.
1 | Pracovní listy („List1“). Chraňte |
List ochrany - ochrana heslem
1 | Pracovní listy („List1“). Chraňte „Heslo“ |
Chraňte nastavení pracovního listu
Výše uvedené příklady budou chránit listy se standardním nastavením ochrany. Místo toho můžete chtít upravit, co je chráněno:
12345 | Pracovní listy („List1“). Chránit heslo: = strPassword, DrawingObjects: = True, Obsah: = True, Scénáře: = 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 |
Namísto použití výše uvedené syntaxe doporučuji zaznamenat makro s požadovaným nastavením (zvoleným v nabídce Ochrana listu výše) a zkopírovat + vložit zaznamenaný kód do vaší procedury.
Chránit list - umožnit VBA provádět změny
Ve výchozím nastavení se při ochraně listu ochrana vztahuje kromě operací uživatelů také na operace VBA. Pokud se VBA pokusí upravit uzamčenou buňku, zobrazí se chyba za běhu 1004. Abyste tomu zabránili, můžete své listy odemknout a znovu chránit, kdykoli s nimi VBA potřebuje komunikovat:
123456789 | Sub Edit_Sheet1 ()'Odemknout list 1Pracovní listy („List1“). Zrušte ochranu„Udělejte něco pro list 1„Chraňte list 1Pracovní listy („List1“). ChraňteEnd Sub |
Je však snadné zapomenout odemknout a/nebo znovu chránit své pracovní listy. To může zvýšit pravděpodobnost chyby kódování.
Místo toho můžete použít nastavení UserInterFaceOnly. Je -li hodnota PRAVDA, budou listy chráněny POUZE před uživateli, NE před VBA.Váš kód VBA bude moci list upravovat stejně, jako kdyby byl odemčen.
Dva důležité body o UserInterFaceOnly:
- Toto nastavení není k dispozici v nabídce Ochrana listu (viz výše). Je to nastavení, které musí být definováno ve VBA.
- Při zavření sešitu se nastavení neuloží. Musí být znovu definován při každém otevření sešitu.
Chcete -li tedy nastavit vlastnost UserInterFaceOnly, měli byste do modulu ThisWorkbook umístit následující proceduru události Workbook_Open:
1234567 | Soukromý dílčí sešit_Otevřít ()Dim ws As WorksheetZa každé ws v ThisWorkbook.Worksheetsws.Protect UserInterfaceOnly: = TrueDalší wsEnd Sub |
Workbook_Open je procedura speciální události, která se spustí pokaždé, když je sešit otevřený. Musí být umístěn v modulu ThisWorkbook. Alternativně můžete použít proceduru události Auto_Open (zde není zahrnuto).
Zrušte ochranu makra všech listů
Toto makro odstraní všechny listy v sešitu:
123456789 | „Zrušte ochranu všech pracovních listůSub UnProtectAllSheets ()Dim ws As WorksheetZa každé ws v pracovních listechws.Onprotect "heslo"Další wsEnd Sub |
Chraňte všechny listy v makru
Toto makro bude chránit všechny listy v sešitu:
123456789 | „Chraňte všechny pracovní listySub ProtectAllSheets ()Dim ws As WorksheetZa každé ws v pracovních listechws.Chraňte "heslo"Další wsEnd Sub |