Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak pomocí VBA Excel zamykat (Protect) a odemykat (Unprotect) buňky.
Ochrana (Protection) buněk je vhodná, nemusí jít ani o požadavek, aby Vám někdo neodhalil Vaše funkce a vzorce, ale pouze o to ať si své vzroce nepřepíšete. Elegantně jde toto vyřešit pomocí zamykání. Jak na zamykání ve VBA je sepsáno v tomto článku.
Upozornění: Heslo v Excel není úplně bezpečné, stačí mít trochu znalosti (případně si stáhnout příslušný software) a heslo překonate. Proto berte tuto ochranu jako základní, aby pro nepřepsání si důležitých údajů. Uchovávat v tom finanční přehledy firmy zabezpečené pouze heslem nedoporučuji. Raději tento soubor zašifrujte profsionálním nástrojem. A hlavně když už používate heslo tak jej nezapomenout...
Nezapomenout: V 19. století se zamykalo! - Hláška z návštěvníku.
Nejčastější a nejednoduší úloha. Sešit je zamknut a mi pomocí VBA potřebujeme změnit zamknoutou buňku. Jak na to? Odemknout, změnit a nezapomenout zamknout.
Předpokládám, že heslo znáte. Pokud hledáte jak obejít heslo musíte se zeptat strýčka googla.
ThisWorkbook.Worksheets("List1").Unprotect Password:="Heslo"
Něco změníme. Třeba v buňce A1.
ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Provedena změna :)"
Tak a list opět ochraníme.
ThisWorkbook.Worksheets("List").Protect Password:="Heslo"
Zjištění, zda je list je chráněn.
If ActiveSheet.ProtectContents = True Then
MsgBox "List chráněn. :("
Else
MsgBox "List nechráněn. :)"
End If
Bude-li zájem o další VBA kódy týkající se zamykaní buněk, pokusím se je zodpovědět v komentářích či doplnit tento článek. Zajímavá témata jsou:
Článek byl aktualizován: 19.09.2020 11:06
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 12.12.13 15:14
Zdravim, prosím o radu. Zamčený list - při spuštění makra na začátku odemkne, provede se zadaný kod, list zase zamkne. Funguje správně, ale při sdílení sešitu není možné odemknout/zamknout list. Existuje na to nějaké řešení? Bylo by například možné při sdílení sešit nechat zamčený a nastavit "Povolit uživatelům úpravy oblastí" s heslem? Pokud ano jak by se to zapisovalo ve VBA. Díky za odpověď
Přidáno: 16.06.14 12:50
Zdravím, mám dotaz k zamykání. Mám makro, kde jeden z produktů jsou grafy, po proběhnutí makra všechno zamknu, a tady vznikne problém - graf nelze označit, aby šel samostatně vytisknout. A naopak, když jej nechám odemčený, tak pak je možné, aby ho uživatel smazal, a tomu chci zabránit. Napadá Tě nějaké řešení?
Přidáno: 10.07.14 15:35
Dobrý den, Bojuji se zamykáním buněk. Správně vyberu ty, které nechci zamknout a pak celý list zamknu. Vše funguje OK do doby, než potřebuji použít filtry na daném listě. Umíte mi poradit? Díky
Přidáno: 22.08.14 06:37
Zdravím vespolek,
řeším něco podobného a prozatím zcela bez úspěchu :(
mám xls soubor, v něm 30 listů, spousta vzorečků, takže je nasnadě je uzamknout. Občas ale doplňuji data, takže jsem potřeboval vytvořit ve VBA, hromadné uzamčení/oemknutí listů.
S tím jsem si poradil (formou tlačítka v listu, nebo vyvoláním pole za pomoci klávesové zkratky).
Mám ale "těžký" :) problém:
potřebuji zpřístupnit komentáře (klasickým uzamčením se jednoduše zaškrtne volba "Upravit Objekty"), ale ve VBA vůbec nemůžu narazit na ten správný parametr (DrawingObjects:=True, AllowFormattingRows:=True, etc...) Lidé dobří, věděl by někdo ... ?
S tím souvisí možná už "vyšší dívčí" - pokud se totiž povolí objekty, tak lze manipulovat s vytvořenými tlačítky -> karta "Vývojář"-"Režim návrhu" :( Lze toto nějak obejít ?
A nakonec něco pro Ivanu,
ale nevím, jestli jsem přesně pochopil problém.
Po uzamčení není filtr funkční ?
No v rychlosti jsem zkusil pro tlačítko něco spáchat (odemyká/zamyká všechny listy najednou):
za hodnotou "list.Protect Password:=heslo" jsou všechny mě známé parametry, jen právě ty objekty nevím :(
Private Sub CommandButton1_Click()
Dim list As Worksheet
heslo = InputBox("Zadej heslo", "ZÁMEK")
For Each list In Worksheets
If list.ProtectContents = True Then
list.Unprotect Password:=heslo
Else
list.Protect Password:=heslo, DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End If
Next list
End Sub
Přidáno: 22.08.14 12:43
Dodatek k předchozímu ...
takže pro povolení filtrů je ten správný parametr:
AllowFiltering:=True
pro úplnost ;) kód pro klávesové zkratky
Private Sub CommandButton2_Click()
Dim list As Worksheet
For Each list In Worksheets
If list.ProtectContents = True Then
list.Unprotect Password:=TextBox1.Text
Else
list.Protect Password:=TextBox1.Text, DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End If
Next list
Unload Me
End Sub
vybrat Insert>UserForm
- zobrazí se Toolbox
vybrat View>Toobox
- zadat Label, CommandButton, TextBox
viditelný popis (název) prvků je v Properties vždy kolonka Caption
- v Properties pro TextBox najít pole PasswordChar a zadat * (jinak se heslo bude zadávat viditelně)
vybrat Insert>Module a zadat:
Sub ShowPass()
UserForm1.Show
End Sub
vybrat Vývojář-Makra (nebo ALT+F8) a zvolit si vyvolávací zkratku (používám Ctrl+Shift+M)
výsledek stejný jako u tlačítka
Přidáno: 04.06.15 14:36
dobrý den, potřebuji poradit. mam v tabulku se vzorci. Mam okruh lidi, kteri maji pouze nahled.(zamknu list), ale mam i okruh lidi kteri potrebuji do urcitych casti zapisovat. V pripade ze jim odemknu list (musi byt zamcen kvuli prvnimu okruhu lidi)tak se mi zaroven odemknout i me bunky a casto se stava ze mi prepisi co nemaji. Takze zkracene potrebuji v prvnim okruhu zamknout cely list a po odemceni potrebuji mit jeste zamcene urcite bunky. děkuji za pomoc
Přidáno: 15.12.16 13:03
Dobrý den, ráda bych se zeptala, zda lze nějakým způsobem zamknout pouze formátování buněk - aby uživatelé excelu mohli pouze vkládat hodnoty a formát buněk se přitom nezměnil (i když budou vkládat klasicky přes ctrl + v a ne přes Vložit pouze hodnoty). Děkuji
Přidáno: 19.12.16 18:43
Dobrý deň, viete mi poradit? mam tabulku kde zapisujem namerané hodnoty, po zapísaní ich tlačidlom premiestnim do Databanky ( iný list) kde mam archív nameranych hodnôt. Tento list by som chcel uzamknúť aby nemohol nikto meniť údaje. Problem je keď ho zamknem, nefunuguje mi prvý krok - premiestnovanie údajov. Dík za help. :)
Přidáno: 19.12.16 18:47
Ďakujem, už to mám. Pomohol mi Váš web.
Přidáno: 19.12.16 20:33
Dobrý deň, mam na zaciatku makro odomknutie listu a na konci zamknutie listu. ale stane sa že necha list odomknuty. čím to je? díky Sub NoveMeranie() ThisWorkbook.Worksheets("DB_201960").Unprotect Password:="201960" Dim r As Long, z As Range Set z = Worksheets("201960").Range("A6:J15") With Worksheets("DB_201960") r = .Cells(.Rows.Count, 2).End(xlUp).Row + 1 .Cells(r, 2).Resize(10, 10).Value = z.Value .Cells(r, 1).Resize(10).Merge: .Cells(r, 1).Value = Date With .Cells(r, 1).MergeArea.Resize(, 11) .Borders(xlEdgeBottom).Weight = xlMedium: .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium: .Borders(xlEdgeLeft).Weight = xlMedium End With i = MsgBox("Sú údaje v tolerancii?", vbYesNo, "Plat") Select Case i Case vbNo i = MsgBox("Zastaviť produkciu ! ", 16) i = MsgBox("Informovať QM !", 48) Case vbYes MsgBox ("Všetko OK") ThisWorkbook.Worksheets("DB_201960").Protect Password:="201960" End Select End With z.Offset(, 1).Resize(, 9).ClearContents End Sub
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |