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

Cum se blochează sau deblochează celulele pe baza valorilor dintr-o altă celulă din Excel?

În unele cazuri, poate fi necesar să blocați sau să deblocați celulele pe baza valorilor dintr-o altă celulă. De exemplu, aveți nevoie ca intervalul B1: B4 să fie deblocat dacă celula A1 conține valoarea „Acceptare”; și să fie blocat dacă celula A1 conține valoarea „Refuz”. Cum poți face pentru a o realiza? Acest articol vă poate ajuta.

Blocați sau deblocați celulele pe baza valorilor dintr-o altă celulă cu cod VBA


Blocați sau deblocați celulele pe baza valorilor dintr-o altă celulă cu cod VBA

Următorul cod VBA vă poate ajuta să blocați sau să deblocați celulele pe baza valorii dintr-o altă celulă din Excel.

1. Faceți clic dreapta pe fila foaie (foaia cu celule pe care trebuie să o blocați sau să o deblocați pe baza valorilor dintr-o altă celulă) și faceți clic Afișați codul din meniul cu clic dreapta.

2. Apoi copiați și lipiți următorul cod VBA în fereastra Cod.

Cod VBA: Blocați sau deblocați celulele pe baza valorilor dintr-o altă celulă

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. apasă pe Alt + Q tastele simultan pentru a închide Microsoft Visual Basic pentru aplicații fereastră.

De acum înainte, când introduceți valoarea „Acceptare” în celula A1, intervalul B1: B4 este deblocat.

Când introduceți valoarea „Refuzare” în celula A1, intervalul specificat B1: B4 este blocat automat.


Articole pe aceeași temă:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2019 și 365. Suportă toate limbile. Implementare ușoară în întreprindere sau organizație. Funcții complete de încercare gratuită de 30 de zile. Garanție de restituire a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse în fiecare zi!
fundul officetab
Comentarii (50)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum se poate bloca/debloca o celulă variabilă, de exemplu, când celula este [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PLĂTĂ",A16:L16,0))]
Acest comentariu a fost redus la minimum de moderatorul de pe site
Vreau o comandă VBA simplă pe care nu o pot înțelege, vă rugăm să ajutați
Dacă celula A1 este Balnk, atunci celula A2 este blocată și dacă celula A1 conține vreo valoare, atunci celula A2 este deblocată
În mod similar, dacă celula A2 este goală, atunci celula A3 este blocată și dacă celula A2 conține vreo valoare, atunci celula A3 este deblocată
și așa mai departe atâtea celule cât este necesar în orice parte a foii.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut, încerc să obțin acest lucru, dar primesc o eroare că VBA nu poate seta proprietatea Locked a clasei Range dacă foaia a fost protejată. Deprotejarea foii va anula blocarea celulei. Cum să ocoliți asta? Multumesc pentru orice ajutor.
Acest comentariu a fost redus la minimum de moderatorul de pe site
ai rezolvat? am aceeasi problema
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Memo,
Vă rugăm să încercați codul VBA de mai jos.

Private Sub Worksheet_Activate()
Dacă nu este ActiveSheet.ProtectContents, atunci
Interval ("A1"). Blocat = Fals
Interval ("B1:B4"). Blocat = Fals
Final, dacă
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range, xRgA As Range
La data de eroare CV următoare
Application.EnableEvents = Fals
Setați xRg = Interval ("B1:B4")
Setați xRgA = Interval ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Sau xRgA = „Acceptare” Atunci
Application.EnableEvents = Adevărat
Ieșiți din Sub
ElseIf ActiveSheet.ProtectContents _
Și Intersect(Target, xRg) = Target _
Și xRgA.Value = „Refuz” Apoi
xRgA.Select
Final, dacă
Application.EnableEvents = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Veți dori să utilizați linia de interfață din registrul de lucru, astfel încât atunci când deschideți fișierul, acesta protejează foile, dar permite macrocomenzilor să facă oricum modificări;

Private Sub Workbook_Open() „Acesta intră în „ThisWorkbook”

Fișe de lucru ("Instrument pentru comandă"). Protejați parola:="Pwd", UserInterFaceOnly:=True

End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă furnică,
Codul VBA de mai jos vă poate ajuta să rezolvați această problemă. Multumesc pentru comentariu.

Private Sub Worksheet_Activate()
Dacă nu este ActiveSheet.ProtectContents, atunci
Interval ("A1"). Blocat = Fals
Interval ("B1:B4"). Blocat = Fals
Final, dacă
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range, xRgA As Range
La data de eroare CV următoare
Application.EnableEvents = Fals
Setați xRg = Interval ("B1:B4")
Setați xRgA = Interval ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Sau xRgA = „Acceptare” Atunci
Application.EnableEvents = Adevărat
Ieșiți din Sub
ElseIf ActiveSheet.ProtectContents _
Și Intersect(Target, xRg) = Target _
Și xRgA.Value = „Refuz” Apoi
xRgA.Select
Final, dacă
Application.EnableEvents = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,

Este posibil ca acest VBA să blocheze un set de celule/deblocare altul pe baza acestui lucru? De exemplu, intervalul B1:B4 este deblocat și C1:C4 este blocat pentru „acceptare”, apoi B1:B4 este blocat și C1:C4 este deblocat pentru „refuz”?


Multumesc,
creștin
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă creștină,
Foaia ta de lucru este protejată?
Acest comentariu a fost redus la minimum de moderatorul de pe site
va rog ma poate ajuta cineva cu urmatoarele.
Vreau să inserez imagini ale elevilor într-o foaie, apar în altă foaie pe baza numelor lor
Pentru a crea un avion de navigare pentru a ajuta utilizatorii
Pentru a atribui o anumită foaie(e) unui utilizator
Pentru a crea o interfață pentru registrul de lucru
Pentru a crea o pagină de conectare
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă leu,
Orice întrebare despre Excel, vă rugăm să nu ezitați să postați pe forumul nostru: https://www.extendoffice.com/forum.html.
Veți primi mai multe asistențe despre Excel de la profesionistul nostru Excel.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,

Am încercat codul tău și am editat puțin, dar nu pot afla ce greșesc aici?

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă Interval("A40") <> "" Atunci
Interval ("D40:E40"). Blocat = Fals
ElseIf Range("A40") = "" Atunci
Interval ("D40:E40"). Blocat = Adevărat
Final, dacă
End Sub


Părerea mea despre asta a fost dacă nu este nimic în el (A40). Atunci vreau să fiu blocat de VBA. Dacă A40 conține ceva, atunci vreau să fie deblocat. Sper că puteți vedea sensul.


Cu respect Kristoffer
Acest comentariu a fost redus la minimum de moderatorul de pe site
O zi buna,
Nu este nimic în neregulă cu codul tău. Funcționează bine pentru mine.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut. Nici eu nu pot face ca acest cod să funcționeze. Nu face absolut nimic. De parca codul nici nu e acolo?? Sunt foarte nou în VBA și am o înțelegere de bază despre el. Acest cod este rulat așa cum este sau trebuie să fie adăugate lucruri pentru ca acesta să ruleze? Sau transformat într-o macro (ceea ce nu prea înțeleg de ce, deoarece aceasta este o înregistrare a instrucțiunilor, după înțelegerea mea)
Acest comentariu a fost redus la minimum de moderatorul de pe site
CARE VA FI CODUL DACĂ VREAU SĂ BLOCEAZ CELULA E1, E2, E3 .............. PENTRU TEXT SPECIF (SĂ SPUNEM „P”) PE CELULA B1, B2, B3... ..............RESPECTIV.

MULȚUMESC ANTICIPAT
Acest comentariu a fost redus la minimum de moderatorul de pe site
Good Day
Vă rugăm să încercați mai jos scriptul VBA.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă Target.Count = 1 Atunci
Dacă Target.Address = Range("A1"). Address And Target.Value = "A" Atunci
Interval ("B1"). Blocat = Adevărat
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Then
Interval ("B2"). Blocat = Adevărat
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Then
Interval ("B3"). Blocat = Adevărat
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut! am nevoie de un sfat.
Există o modalitate de a nu permite unei celule să fie actualizată decât dacă a îndeplinit o condiție pe o altă celulă?
Exemplu: dacă celula A nu este actualizată, nu îmi va permite să schimb valoarea celulei B pentru a finaliza.

Apreciez feedback-ul.
Multumesc!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Margie,
Vă rugăm să încercați mai jos codul VBA.

Dim PreVal As String
Dim NextVal ca șir
Private Sub Worksheet_Activate()
PreVal = Interval ("A1")
NextVal = Interval(„A1”)
End Sub
Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă (Target.Count = 1) Și (Target.Address = "$A$1"), atunci
NextVal = Interval(„A1”)
Final, dacă
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dacă Target.Count = 1 Atunci
Dacă Target.Address = „$A$1” Atunci
PreVal = Interval ("A1")
ElseIf (Target.Address = "$B$1") Atunci
Dacă PreVal = NextVal Atunci
Application.EnableEvents = Fals
Interval("A1").Selectați
Application.EnableEvents = Adevărat
Final, dacă
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
poate cineva sa corecteze asta va rog>>>

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Pentru i = 7 până la 100
Dacă Range("Cells(D, i)") = "Împrumut" Atunci
Interval ("Celele(V, i):Cells(X, i)"). Blocat = Adevărat
ElseIf Range("Cells(D, i)") = "Economii" Atunci
Interval ("Celele(Q, i):Cells(U, i)").Blocat = Adevărat
Interval ("Celele(W, i):Cells(X, i)"). Blocat = Adevărat
ElseIf Range("Cells(D, i)") = "ShareCap" Atunci
Interval ("Celele(Q, i):Cells(U, i)").Blocat = Adevărat
Interval(„Celele(V, i)”).Locked = True
Final, dacă
Apoi eu
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut! Ma poate ajuta cineva? Trebuie să blochez/îngheț o celulă. Celula respectivă este legată de alta și are o valoare care se schimbă în fiecare minut. Ceea ce trebuie să fac este să păstrez valoarea pentru un anumit minut/oră. Cum pot face asta fără să-l copiez și să-l lipesc ca valoare?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Draga Mira,
Ne pare rău că nu vă pot ajuta cu asta, puteți posta întrebarea dvs. pe forumul nostru: https://www.extendoffice.com/forum.html pentru a obține mai multe suporturi Excel de la profesioniștii noștri.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Sunt cu adevărat nou în asta.
Am încercat să pun un sistem de facturare împreună în excel.
Am creat 3 foi.
1. Șablon de factură (Factură) - Doar o factură generică care este trimisă săptămânal agenților mei.

2. O fișă de date (Fișa de date) mai exact - unde factura poate citi adresa numelui companiei etc., așa că dacă se schimbă ceva, factura va fi actualizată automat.

3. O filă de calendar (Calendar 2018) pentru a fi exact - care este referită în șablonul de factură și pune data și numărul facturii corespunzătoare pe facturile reale.

Ce vreau sa fac.
Fila calendar ar fi pagina mea principală, am adăugat o celulă derulantă de stare pentru fiecare săptămână cu opțiunile „Activ” și „Închis”. Aș dori să blochez întreaga filă „Factură” dacă celula corespunzătoare este setată la „Închis”.

Sper că voi înțelegeți ce încerc să fac.
Mulțumesc în avans.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Ando Veres.
Codul VBA de mai jos vă poate ajuta. Vă rugăm să plasați codul în fereastra de cod al foii a modificării A2018 din Calendar 1 în celula dvs. derulantă. Mulțumesc.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dim xRg As Range
La data de eroare CV următoare
Set xRg = Intersect(Target, Range("A1"))
Dacă xRg nu este nimic, ieșiți din sub
Dacă Target.Validation.Type >= 0 Atunci
Dacă Target.Value = „Închis” Atunci
Sheets(„Fișa de date”).Protect
ElseIf xRg.Value = „Activ” Atunci
Sheets(„Fișa de date”).Deprotejați
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Pregătesc o gestionare a stocurilor de depozit în șablon Excel. Pentru a livra un stoc trebuie să emit o trecere de poartă. Doresc la fiecare trecere de poartă, datele corespunzătoare vor fi actualizate în pagina de stocare zilnică. Odată cu schimbarea nr. de serie a trecerii de poartă, rândul va fi blocat și următorul va fi umplut.
Acest comentariu a fost redus la minimum de moderatorul de pe site
O zi buna,
Ar fi bine dacă vă puteți încărca registrul de lucru aici. Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ma puteti indruma cu privire la ce este in neregula aici, va rog? Vă mulțumesc anticipat.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă Range("K:K") = "STOC EXCESOR", atunci
Interval("S:S").Blocat = Adevărat
ElseIf Range("K:K") = "MISCARE LENTĂ" Atunci
Interval("S:S").Blocat = Adevărat
ElseIf Range("K:K") = "NORMAL" Atunci
Interval("S:S").Blocat = Fals
ElseIf Range("K:K") = "DEFICIENT" Atunci
Interval("S:S").Blocat = Fals
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mă rog să mă sfătuiți cum să corectez acest lucru? Vă mulțumesc anticipat.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă Range("A:A") = "MIȘCARE LENTĂ" atunci
Interval ("B:B"). Blocat = Adevărat
ElseIf Range("A:A") = "STOC EXCESIOR" Atunci
Interval ("B:B"). Blocat = Adevărat
ElseIf Range("A:A") = "NORMAL" Atunci
Interval ("B:B"). Blocat = Fals
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nefiind un expert VB, aș spune că aveți prea multe „Elseif” - dacă le schimbați pe toate doar IF, cu excepția ultimului, atunci sperăm că va funcționa.
Practic, dacă X face asta, dacă Y face asta, dacă Z face asta, dacă niciuna dintre ele - face asta.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum ar fi codul dacă aș vrea să blochez un bloc de celule (Rândurile 6, 7 și 8/Literele D la U, precum și celulele F5 și J5) și să le deblochez când pun un „X” în celula E5? Mulțumesc anticipat!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună MitchyII,
Vrei să spui că blocul de celule specificat a fost blocat manual în avans și vrei doar să le deblochezi tastând un „X” în celula E5?
Dacă eliminați „X” din celula E5, doriți să blocați din nou intervalele?
Am nevoie de mai multe detalii despre problema.
Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Mitchyll (sau oricine), construind din Crystal. Am blocat manual toate celulele și, pe baza informațiilor din coloana G, aș dori ca acestea să rămână blocate sau deblocate. Exemple de celule din coloana H ar trebui să fie deblocate NUMAI dacă „c/p” este plasat în celula anterioară din coloana G
Acest comentariu a fost redus la minimum de moderatorul de pe site
Este posibil să blocați o celulă, când atinge o anumită valoare?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, ați putea să verificați motivul pentru care nu funcționează?

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă Interval("A3:A37").Valoare <> "" Atunci
Interval ("B3:B37"). Blocat = Adevărat
ElseIf Range("A3:A37") = "" Atunci
Interval ("B3:B37"). Blocat = Fals
Final, dacă

Dacă Interval("B3:B37").Valoare <> "" Atunci
Interval ("A3:A37"). Blocat = Adevărat
ElseIf Range("B3:B37") = "" Atunci
Interval ("A3:A37"). Blocat = Fals
Final, dacă

End Sub


Vă mulțumesc foarte mult anticipat!!!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Hi
Tocmai am încercat să folosesc codul de mai sus
și scrie eroare de tip 13 când încerc să o folosesc.
ai putea sa ma ajuti cu asta?

mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Ce versiune de Excel folosești?
Acest comentariu a fost redus la minimum de moderatorul de pe site
hi

dacă trebuie să blochez o celulă din foaia 2 (celula C4) pe baza unei revendicări din foaia 1 (celula C1),
dacă „nu” pe foaia 1 C4; foaia 2 trebuie blocată și trebuie să transfere valoarea din foaia 1 C4,
la foaia 2 C4.

dacă „da” pe foaia 1, trebuie să pot introduce în celula de pe foaia 2

Multumesc Benthe
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, vă rog să mă ajute cineva pentru codul VBA.

dacă selectez din meniul drop-down în celulă Range(A1:A1000) "abc", atunci nu blochez Range (D1:D1000) la (F1:F1000)



dacă selectez din meniul drop-down în celulă Range(A1:A1000) "abc", atunci nu blochez Range (D1:D1000) la (F1:F1000)



dacă selectez din meniul drop-down în celulă Range (A1:A1000) "abc", atunci blochează Range (D1:D1000) la (F1:F1000)



adică celula respectivă A1 pentru D1 până la F1



A2 pentru D2 la F2
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am copiat totul de sus într-o foaie. A funcționat pentru o secundă și acum primesc eroarea „Nu se poate seta proprietatea Blocat a clasei Range”. Chiar am deschis o foaie cu totul nouă și am copiat exemplul tău text. Ai idee ce se întâmplă?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,

Am nevoie de favoarea ta. când selectez Nicio opțiune dintr-o celulă, vreau ca coloanele de mai jos să fie blocate/gri.

Este posibil? Am încercat această formulă, dar nu a funcționat

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)

Dacă Range("D90") = "Da", atunci

Interval ("C94:F104"). Blocat = Fals

ElseIf Range("D90") = "Nu" Atunci

Interval ("C94:F104"). Blocat = Adevărat

Final, dacă

End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Steffi,
Codul funcționează bine.
Dacă doriți să blocați intervalul de celule pentru a preveni editarea, trebuie să protejați foaia de lucru manual după ce selectați Nicio opțiune în D90.
Și întrucât D90 se află în intervalul C94:F104, după protejarea foii de lucru, nici D90 nu poate fi editat.
Acest comentariu a fost redus la minimum de moderatorul de pe site
D90 nu este în gamă. Sunt 4 rânduri deasupra C94
Nu există comentarii postate aici încă
Încărcați mai
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate