Note: The other languages of the website are Google-translated. Back to English

Jak zamknout nebo odemknout buňky na základě hodnot v jiné buňce v aplikaci Excel?

V některých případech možná budete muset zamknout nebo odemknout buňky na základě hodnot v jiné buňce. Například potřebujete odemknout rozsah B1: B4, pokud buňka A1 obsahuje hodnotu „Přijímat“; a být uzamčen, pokud buňka A1 obsahuje hodnotu „Odmítnutí“. Jak můžete toho dosáhnout? Tento článek vám může pomoci.

Zamkněte nebo odemkněte buňky na základě hodnot v jiné buňce pomocí kódu VBA


Zamkněte nebo odemkněte buňky na základě hodnot v jiné buňce pomocí kódu VBA

Následující kód VBA vám pomůže zamknout nebo odemknout buňky na základě hodnoty v jiné buňce v aplikaci Excel.

1. Klikněte pravým tlačítkem na záložku listu (list s buňkami, které potřebujete zamknout nebo odemknout na základě hodnot v jiné buňce) a klikněte Zobrazit kód z nabídky pravého tlačítka myši.

2. Poté zkopírujte a vložte následující kód VBA do okna Kód.

Kód VBA: Zamkněte nebo odemkněte buňky na základě hodnot v jiné buňce

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") = "Accepting" Then
        Range("B1:B4").Locked = False
    ElseIf Range("A1") = "Refusing" Then
        Range("B1:B4").Locked = True
    End If
End Sub

3. zmáčkni Další + Q současně zavřete Microsoft Visual Basic pro aplikace okno.

Od této chvíle, když do buňky A1 zadáte hodnotu „Přijímám“, rozsah B1: B4 se odemkne.

Při zadávání hodnoty „Odmítnutí“ do buňky A1 se zadaný rozsah B1: B4 automaticky uzamkne.


Související články:


Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2021 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Plné funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!
officetab dno
Komentáře (52)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Jak lze zamknout/odemknout proměnnou buňku, např. když je buňka [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PAY",A16:L16,0))]
Tento komentář byl moderátorem webu minimalizován
Chci jednoduchý příkaz VBA, který nemohu zjistit, prosím o pomoc
Pokud je buňka A1 Balnk, pak je buňka A2 uzamčena a pokud buňka A1 obsahuje nějakou hodnotu, pak je buňka A2 odemčena
Podobně, pokud je buňka A2 prázdná, buňka A3 je uzamčena a pokud buňka A2 obsahuje jakoukoli hodnotu, je buňka A3 odemčena
a tak dále tolik buněk podle požadavku v jakékoli části listu.
Tento komentář byl moderátorem webu minimalizován
Ahoj, snažím se toho dosáhnout, ale dostávám chybu, že VBA nedokáže nastavit vlastnost Locked třídy Range, pokud byl list chráněn. Odstranění ochrany listu pak neguje zamykanou buňku. Jak to obejít? Díky za jakoukoli pomoc.
Tento komentář byl moderátorem webu minimalizován
Vyřešili jste? Mám stejný problém
Tento komentář byl moderátorem webu minimalizován
milá memo,
Zkuste prosím níže uvedený kód VBA.

Private Sub Worksheet_Activate()
If Not ActiveSheet.ProtectContents Then
Rozsah("A1").Zamčeno = False
Range("B1:B4").Zamčeno = False
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRg jako rozsah, xRgA jako rozsah
On Error Resume Next
Application.EnableEvents = False
Nastavit xRg = Range("B1:B4")
Nastavit xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Nebo xRgA = "Přijímám" Potom
Application.EnableEvents = True
Konec Sub
ElseIf ActiveSheet.ProtectContents _
And Intersect(Target, xRg) = Target _
A xRgA.Value = "Odmítnutí" Potom
xRgA.Vybrat
End If
Application.EnableEvents = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Budete chtít použít řádek rozhraní v sešitu, takže když otevřete soubor, chrání listy, ale přesto umožňuje makra provádět změny;

Private Sub Workbook_Open() 'Toto přejde do "ThisWorkbook"

Worksheets("Order Tool").Protect Password:="Pwd", UserInterFaceOnly:=True

End Sub
Tento komentář byl moderátorem webu minimalizován
drahý Ant,
Níže uvedený kód VBA vám může pomoci vyřešit tento problém. Děkuji za váš komentář.

Private Sub Worksheet_Activate()
If Not ActiveSheet.ProtectContents Then
Rozsah("A1").Zamčeno = False
Range("B1:B4").Zamčeno = False
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRg jako rozsah, xRgA jako rozsah
On Error Resume Next
Application.EnableEvents = False
Nastavit xRg = Range("B1:B4")
Nastavit xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Nebo xRgA = "Přijímám" Potom
Application.EnableEvents = True
Konec Sub
ElseIf ActiveSheet.ProtectContents _
And Intersect(Target, xRg) = Target _
A xRgA.Value = "Odmítnutí" Potom
xRgA.Vybrat
End If
Application.EnableEvents = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Je možné, aby toto VBA na základě toho uzamklo jednu sadu buněk/odemklo jinou? Například rozsah B1:B4 je odemčen a C1:C4 je uzamčen pro "přijetí" a poté je B1:B4 uzamčen a C1:C4 je odemčen pro "odmítnutí"?


Díky,
křesťan
Tento komentář byl moderátorem webu minimalizován
Milý křesťane,
Je váš pracovní list chráněn?
Tento komentář byl moderátorem webu minimalizován
prosím může mi někdo pomoci s následujícím.
Chci vložit obrázky studenta na jeden list, který se objeví na jiném listu na základě jejich jmen
Chcete-li vytvořit navigační rovinu pro pomoc uživatelům
Přiřazení konkrétního listu (listů) uživateli
Chcete-li vytvořit rozhraní pro sešit
Chcete-li vytvořit přihlašovací stránku
Tento komentář byl moderátorem webu minimalizován
drahý leo,
Jakékoli dotazy ohledně Excelu, prosím, neváhejte napsat do našeho fóra: https://www.extendoffice.com/forum.html.
Další podporu o Excelu získáte od našeho odborníka na Excel.
Tento komentář byl moderátorem webu minimalizován
Ahoj,

Zkoušel jsem váš kód a trochu jsem ho upravil, ale nemohu přijít na to, co dělám špatně?

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
If Range("A40") <> "" Pak
Range("D40:E40").Zamčeno = False
ElseIf Range("A40") = "" Pak
Rozsah("D40:E40").Zamčeno = Pravda
End If
End Sub


Myslel jsem na to, jestli v tom nic není (A40). Pak chci zamknout pomocí VBA. Pokud A40 něco obsahuje, pak chci, aby to bylo odemčené. Doufám, že vidíte smysl toho.


S pozdravem Kristoffer
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
S vaším kódem není nic špatného. Mně to funguje dobře.
Tento komentář byl moderátorem webu minimalizován
Ahoj. Také nemohu zprovoznit tento kód. Nedělá to absolutně nic. Jako že tam ten kód ani není?? Jsem velmi nový VBA a mám základní znalosti o něm. Spouští se tento kód tak, jak je, nebo do něj musí být přidány věci, aby fungoval? Nebo se změnilo na makro (což vlastně nechápu proč, protože je to záznam instrukcí, pokud jim rozumím)
Tento komentář byl moderátorem webu minimalizován
JAKÝ BUDE KÓD, KDYŽ CHCI ZAMKNOUT BUŇKU E1, E2, E3 ............... PRO KONKRÉTNÍ TEXT (ŘEKNĚME "P") NA BUŇKU B1, B2, B3... ..............RESPEKtivně.

Díky předem
Tento komentář byl moderátorem webu minimalizován
Dobrý den
Zkuste níže uvedený skript VBA.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Pokud Target.Count = 1 Pak
If Target.Address = Range("A1").Address And Target.Value = "A" Then
Rozsah("B1").Zamčeno = Pravda
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Then
Rozsah("B2").Zamčeno = Pravda
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Then
Rozsah("B3").Zamčeno = Pravda
End If
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den!
Мне тоже необходимо заблокировать значение, но только в одной ячейке в зависимости от значения в другой, я попробовала использовать код в комментарии выше, но он не работает(оставила только один параметр для блокировки), но он у меня не работает - при этом нет сообщения об ошибке, ячейка, которая должна быть заблокирована - просто не блокиаруетвана, остиойтвана В чем может быть причина?

Вот код, который я использовала:

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Pokud Target.Coun t=1 Pak
If Target.Address = Range("C9").Address And Target.Value = "согласно плану" Then
Rozsah("C10").Zamčeno = Pravda
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Hi Ghost,
Omlouvám se, že úplně nerozumím tomu, co máte na mysli. Pro přehlednost prosím připojte vzorový soubor nebo snímek obrazovky s vašimi daty a požadovanými výsledky.
Tento komentář byl moderátorem webu minimalizován
Ahoj! potřebuji poradit.
Existuje způsob, jak neumožnit aktualizaci buňky, pokud nesplňuje podmínku jiné buňky?
Ukázka: pokud není buňka A aktualizována, nedovolí mi změnit hodnotu buňky B na dokončení.

Oceníte zpětnou vazbu.
Díky!
Tento komentář byl moderátorem webu minimalizován
Milá Margie,
Zkuste prosím níže uvedený kód VBA.

Dim PreVal As String
Dim NextVal As String
Private Sub Worksheet_Activate()
PreVal = rozsah("A1")
NextVal = Rozsah("A1")
End Sub
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
If (Target.Count = 1) And (Target.Address = "$A$1") Then
NextVal = Rozsah("A1")
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Pokud Target.Count = 1 Pak
If Target.Address = "$A$1" Then
PreVal = rozsah("A1")
ElseIf (Target.Address = "$B$1") Potom
If PreVal = NextVal Then
Application.EnableEvents = False
Rozsah("A1").Vyberte
Application.EnableEvents = True
End If
End If
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
může to někdo opravit pls >>>

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Pro i = 7 Pro 100
If Range("Cells(D, i)") = "Půjčka" Pak
Rozsah("Cells(V, i):Cells(X, i)").Locked = True
ElseIf Range("Cells(D, i)") = "Úspory" Potom
Rozsah("Cells(Q, i):Cells(U, i)").Zamknuto = True
Rozsah("Cells(W, i):Cells(X, i)").Zamknuto = True
ElseIf Range("Cells(D, i)") = "ShareCap" Potom
Rozsah("Cells(Q, i):Cells(U, i)").Zamknuto = True
Rozsah("Cells(V, i)")).Zamčeno = True
End If
Příště já
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj! může mi někdo pomoci? Musím zamknout/zmrazit buňku. Tato buňka je propojena s jinou a má hodnotu, která se každou minutu mění. Co mám dělat, je udržet hodnotu po určitou minutu/hodinu. Jak to mohu udělat, aniž bych to zkopíroval a vložil jako hodnotu?
Tento komentář byl moderátorem webu minimalizován
Milá Miro,
Je nám líto, s tím vám nemůžeme pomoci, svůj dotaz můžete zveřejnit v našem fóru: https://www.extendoffice.com/forum.html získat další podporu Excelu od našeho profesionála.
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Jsem v tom opravdu nový.
Snažil jsem se dát dohromady fakturační systém v excelu.
Vytvořil jsem 3 listy.
1. Šablona faktury (Faktura) – Pouze obecná faktura, která je zasílána mým agentům týdně.

2. Data sheet (Data sheet), abych byl přesný - kde je na faktuře možné přečíst adresu firmy atd., takže pokud se něco změní, faktura se automaticky aktualizuje.

3. Karta kalendáře (Kalendář 2018), abych byla přesná – na kterou se odkazuje v šabloně faktury a uvádí odpovídající datum a číslo faktury na skutečné faktury.

Co chci dělat.
Karta kalendáře by byla moje hlavní stránka, přidal jsem stavovou rozevírací buňku pro každý týden s možnostmi "Aktivní" a "Zavřeno". Chtěl bych zamknout celou kartu "Faktura", pokud je odpovídající buňka nastavena na "Uzavřeno".

Doufám, že rozumíte tomu, o co se snažím.
Díky předem.
Tento komentář byl moderátorem webu minimalizován
Milý Ando Veresi.
Níže uvedený kód VBA vám může pomoci. Vložte kód do okna kódu listu změny A2018 kalendáře 1 do vaší rozevírací buňky. Děkuji.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Dim xRg jako rozsah
On Error Resume Next
Nastavit xRg = Intersect(Target, Range("A1"))
Pokud xRg není nic, pak Exit Sub
Pokud Target.Validation.Type >= 0 Pak
If Target.Value = "Closed" Then
Listy("Datový list").Protect
ElseIf xRg.Value = "Aktivní" Potom
Listy("Datový list").Nechránit
End If
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Připravuji skladové hospodářství v šabloně Excel. Abych dodal zásoby, musím vydat průchod bránou. Chci, aby každá průchodka prošla, odpovídající údaje budou aktualizovány na stránce denního odběru skladu. Se změnou sériového čísla průchodu bránou řádek bude uzamčen a další bude vyplněn.
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Bylo by hezké, kdybyste sem mohli nahrát svůj sešit. Děkuji za váš komentář.
Tento komentář byl moderátorem webu minimalizován
Můžete mi prosím poradit, co je tady špatně? Děkuji předem.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
If Range("K:K") = "OVER STOCK" Pak
Rozsah("S:S").Zamčeno = Pravda
ElseIf Range("K:K") = "POMALÝ POHYB" Potom
Rozsah("S:S").Zamčeno = Pravda
ElseIf Range("K:K") = "NORMÁLNÍ" Potom
Rozsah("S:S").Zamčeno = False
ElseIf Rozsah("K:K") = "NEDOSTATEK" Potom
Rozsah("S:S").Zamčeno = False
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Mohli byste mi laskavě poradit, jak to opravit? Děkuji předem.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
If Range("A:A") = "SLOW MOVING" Pak
Rozsah("B:B").Zamčeno = Pravda
ElseIf Range("A:A") = "OVER STOCK" Potom
Rozsah("B:B").Zamčeno = Pravda
ElseIf Range("A:A") = "NORMÁLNÍ" Potom
Rozsah("B:B").Zamčeno = False
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Nebýt odborníka na VB, řekl bych, že máte příliš mnoho "Elseif" - pokud je všechny změníte na pouze IF kromě toho posledního, doufejme, že to bude fungovat.
V zásadě Pokud X udělá toto, Pokud Y udělá toto, pokud Z udělá toto, pokud nic z toho – udělejte toto.
Tento komentář byl moderátorem webu minimalizován
Jaký by byl kód, kdybych chtěl zamknout blok buněk (řádky 6, 7 a 8/písmena D až U a také buňky F5 a J5) a nechat je odemknout, když do buňky E5 vložím „X“? Díky předem!
Tento komentář byl moderátorem webu minimalizován
Ahoj MitchyII,
Máte na mysli, že zadaný blok buněk byl předem ručně uzamčen a chcete je pouze odemknout zadáním „X“ do buňky E5?
Pokud odstraníte "X" z buňky E5, chcete znovu uzamknout rozsahy?
Potřebuji více podrobností o problému.
Děkujeme za váš komentář.
Tento komentář byl moderátorem webu minimalizován
Ahoj Mitchille (nebo kdokoli jiný), stavíme na Crystal. Ručně jsem zamkl všechny buňky a na základě informací ve sloupci G bych chtěl, aby zůstaly zamčené nebo odemčené. Vzorové buňky ve sloupci H by měly být odemčeny POUZE, pokud je "c/p" umístěno v předchozí buňce ve sloupci G
Tento komentář byl moderátorem webu minimalizován
Je možné zamknout buňku, když dosáhne určité hodnoty?
Tento komentář byl moderátorem webu minimalizován
Dobrý den, můžete prosím zjistit důvod, proč to nefunguje?

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
If Range("A3:A37").Hodnota <> "" Pak
Rozsah("B3:B37").Zamčeno = Pravda
ElseIf Range("A3:A37") = "" Pak
Range("B3:B37").Zamčeno = False
End If

If Range("B3:B37").Hodnota <> "" Potom
Rozsah("A3:A37").Zamčeno = Pravda
ElseIf Range("B3:B37") = "" Pak
Range("A3:A37").Zamčeno = False
End If

End Sub


Předem moc děkuji!!!
Tento komentář byl moderátorem webu minimalizován
Hi
Právě jsem zkusil použít výše uvedený kód
a při pokusu o použití se zobrazí chyba typu 13.
mohl bys mi s tím pomoct?

děkuji
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Jakou verzi Excelu používáte?
Tento komentář byl moderátorem webu minimalizován
hi

pokud potřebuji zamknout buňku na listu 2 (buňka C4) na základě nároku z listu 1 (buňka C1),
pokud "ne" na listu 1 C4; list 2 musí být uzamčen a musí přenášet hodnotu z listu 1 C4,
na list 2 C4.

pokud "ano" na listu 1, musím být schopen napsat do buňky na listu 2

Díky Benthe
Tento komentář byl moderátorem webu minimalizován
Ahoj prosím někdo mi pomozte s kódem VBA .

pokud vyberu z rozevíracího seznamu v buňce Rozsah (A1:A1000) "abc", nezamknu rozsah (D1:D1000) až (F1:F1000)



pokud vyberu z rozevíracího seznamu v buňce Rozsah (A1:A1000) "abc", nezamknu rozsah (D1:D1000) až (F1:F1000)



pokud vyberu z rozevíracího seznamu v buňce Rozsah (A1:A1000) "abc", zamknu rozsah (D1:D1000) na (F1:F1000)



tj. příslušná buňka A1 pro D1 až F1



A2 pro pro D2 až F2
Tento komentář byl moderátorem webu minimalizován
Vše jsem zkopíroval shora na list. Fungovalo to na sekundu a teď se mi zobrazuje chyba „Nelze nastavit vlastnost Locked třídy Range“. Dokonce jsem otevřel celý nový list a doslovně zkopíroval váš příklad. Máte představu, co se děje?
Tento komentář byl moderátorem webu minimalizován
Ahoj,

Potřebuji vaši přízeň. když v buňce vyberu možnost Žádná, chci, aby byly níže uvedené sloupce uzamčeny/zašedlé.

Je to možné? Zkoušel jsem tento vzorec, ale nefunguje

Soukromá dílčí tabulka_Změna (ByVal Target As Range)

If Range("D90") = "Ano" Pak

Range("C94:F104").Zamčeno = False

ElseIf Range("D90") = "Ne" Pak

Range("C94:F104").Zamčeno = True

End If

End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj Steffi,
Kód funguje dobře.
Pokud chcete uzamknout rozsah buněk, abyste zabránili úpravám, musíte list chránit ručně po výběru možnosti Ne v D90.
A protože D90 je v rozsahu C94:F104, po ochraně listu nelze upravovat ani D90.
Tento komentář byl moderátorem webu minimalizován
D90 není v dosahu. Je to 4 řádky nad C94
Zatím zde nejsou žádné komentáře
Načíst další
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění

Sociální sítě

Copyright © 2009 - www.extendoffice.com. | Všechna práva vyhrazena. Poháněno ExtendOffice. | |. | Sitemap
Microsoft a logo Office jsou ochranné známky nebo registrované ochranné známky společnosti Microsoft Corporation ve Spojených státech a / nebo jiných zemích.
Chráněno Sectigo SSL