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

Hur låser eller låser man upp celler baserat på värden i en annan cell i Excel?

I vissa fall kan du behöva låsa eller låsa upp celler baserat på värden i en annan cell. Du behöver till exempel intervallet B1: B4 vara upplåst om cell A1 innehåller värdet "Accepterar"; och att låses om cell A1 innehåller värdet ”Refusing”. Hur kan du göra för att uppnå det? Den här artikeln kan hjälpa dig.

Lås eller låsa upp celler baserat på värden i en annan cell med VBA-kod


Lås eller låsa upp celler baserat på värden i en annan cell med VBA-kod

Följande VBA-kod kan hjälpa dig att låsa eller låsa upp celler baserat på värde i en annan cell i Excel.

1. Högerklicka på arkfliken (arket med celler som du behöver för att låsa eller låsa upp baserat på värden i en annan cell) och klicka Visa kod från högerklickmenyn.

2. Kopiera och klistra sedan in följande VBA-kod i kodfönstret.

VBA-kod: Lås eller låsa upp celler baserat på värden i en annan cell

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. tryck på andra + Q samtidigt för att stänga Microsoft Visual Basic för applikationer fönster.

Från och med nu, när du anger värdet "Accepterar" i cell A1, är området B1: B4 olåst.

När du anger värdet "Refusing" i cell A1 låses det angivna området B1: B4 automatiskt.


Relaterade artiklar:


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (52)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Hur kan man låsa/låsa upp en variabel cell t.ex. när cellen är [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PAY",A16:L16,0))]
Denna kommentar minimerades av moderatoren på webbplatsen
Jag vill ha ett enkelt VBA-kommando som jag inte kan ta reda på, snälla hjälp
Om cell A1 är Balnk så är cell A2 låst och om cell A1 innehåller något värde så är cell A2 upplåst
På samma sätt om cell A2 är tom så är cell A3 låst och om cell A2 innehåller något värde så är cell A3 olåst
och så vidare så många celler som per krav i någon del av arket.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag försöker uppnå detta, men jag får ett felmeddelande om att VBA inte kan ställa in Locked-egenskapen för Range-klassen om arket har skyddats. Om du tar bort skyddet av arket upphävs cellen som låses. Hur kommer man runt detta? Tack för all hjälp.
Denna kommentar minimerades av moderatoren på webbplatsen
Har du löst det? jag har samma problem
Denna kommentar minimerades av moderatoren på webbplatsen
Kära memo,
Försök med VBA-koden nedan.

Private Sub Worksheet_Activate()
Om inte ActiveSheet.ProtectContents då
Range("A1"). Låst = Falskt
Range("B1:B4"). Låst = Falskt
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range, xRgA As Range
On Error Resume Next
Application.EnableEvents = False
Ställ in xRg = Range("B1:B4")
Ställ in xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Eller xRgA = "Accepterar" Då
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
Och Intersect(Target, xRg) = Target _
Och xRgA.Value = "Vejrar" Då
xRgA.Select
End If
Application.EnableEvents = True
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Du vill använda gränssnittsraden i arbetsboken så när du öppnar filen skyddar den arken men tillåter makron att göra ändringar ändå;

Private Sub Workbook_Open() 'Detta går in i "ThisWorkbook"

Arbetsblad("Order Tool"). Skydda lösenord:="Pwd", UserInterFaceOnly:=True

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Ant,
VBA-koden nedan kan hjälpa dig att lösa detta problem. Tack för din kommentar.

Private Sub Worksheet_Activate()
Om inte ActiveSheet.ProtectContents då
Range("A1"). Låst = Falskt
Range("B1:B4"). Låst = Falskt
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range, xRgA As Range
On Error Resume Next
Application.EnableEvents = False
Ställ in xRg = Range("B1:B4")
Ställ in xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Eller xRgA = "Accepterar" Då
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
Och Intersect(Target, xRg) = Target _
Och xRgA.Value = "Vejrar" Då
xRgA.Select
End If
Application.EnableEvents = True
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,

Är det möjligt att låta denna VBA låsa en uppsättning celler/låsa upp en annan baserat på detta? Till exempel är intervall B1:B4 upplåst och C1:C4 är låst för att "acceptera" och sedan är B1:B4 låst och C1:C4 är upplåst för att "vägra"?


Tack,
Christian
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Christian,
Är ditt arbetsblad skyddat?
Denna kommentar minimerades av moderatoren på webbplatsen
snälla kan någon hjälpa mig med följande.
Jag vill infoga bilder på elever i ett blad, visas i ett annat blad baserat på deras namn
Att skapa ett navigeringsplan för att hjälpa användare
Att tilldela ett eller flera särskilda blad till en användare
För att skapa ett gränssnitt för arbetsboken
För att skapa en inloggningssida
Denna kommentar minimerades av moderatoren på webbplatsen
Kära leo,
Har du frågor om Excel, tveka inte att skriva i vårt forum: https://www.extendoffice.com/forum.html.
Du kommer att få mer stöd om Excel från vår Excel-proffs.
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,

Jag har provat din kod och redigerat lite, men jag kan inte komma på vad jag gör för fel här?

Privata delarkivsförändring (ByVal-mål som område)
If Range("A40") <> "" Då
Range("D40:E40"). Låst = Falskt
ElseIf Range("A40") = "" Då
Range("D40:E40"). Låst = Sant
End If
End Sub


Min tanke om det var om det inte finns något i det (A40). Då vill jag låsa av VBA. Om A40 innehåller något vill jag att den ska låsas upp. Jag hoppas att du kan se meningen med det.


Hälsningar Kristoffer
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Det är inget fel på din kod. Det fungerar bra för mig.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej. Jag kan inte heller få den här koden att fungera. Det gör absolut ingenting. Som om koden inte ens finns där?? Jag är väldigt ny på VBA och har en grundläggande förståelse för det. Körs den här koden som den är, eller måste den ha tillsatt saker också för att den ska köras? Eller förvandlats till ett makro (vilket jag inte riktigt förstår varför eftersom det är en inspelning av instruktioner, om jag förstår dem)
Denna kommentar minimerades av moderatoren på webbplatsen
VAD BLIR KODEN OM JAG VILL LÅSA CELL E1, E2, E3 .............. FÖR SPECIFIK TEXT (LÅT SÄGA "P") PÅ CELL B1, B2, B3... ..............RESPEKTIVE.

Tack på förhand
Denna kommentar minimerades av moderatoren på webbplatsen
God dag
Försök nedan VBA-skript.

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Count = 1 Då
Om Target.Address = Range("A1").Address And Target.Value = "A" då
Range("B1"). Låst = Sant
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Då
Range("B2"). Låst = Sant
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Då
Range("B3"). Låst = Sant
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
God dag!
Мне тоже необходимо заблокировать значение, но только в одной ячейке в зависимости от значения в другой, я попробовала использовать код в комментарии выше, но он не работает(оставила только один параметр для блокировки), но он у меня не работает - при этом нет сообщения об ошибке, ячейка, которая должна быть заблокирована - просто не блокируется, остается активной. В чем может быть причина?

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

Privata delarkivsförändring (ByVal-mål som område)
Om Target.Coun t=1 Då
Om Target.Address = Range("C9").Address And Target.Value = "согласно плану" Då
Range("C10"). Låst = Sant
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Ghost,
Jag är ledsen, jag förstår inte riktigt vad du menar. För tydlighetens skull, bifoga en exempelfil eller en skärmdump med dina data och önskade resultat.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej! behöver lite råd.
Finns det ett sätt att inte tillåta att en cell uppdateras om den inte har uppfyllt ett villkor på en annan cell?
Exempel: om cell A inte uppdateras kommer det inte att tillåta mig att ändra värdet på cell B för att slutföra.

Uppskatta feedbacken.
Tack!
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Margie,
Försök nedan VBA-kod.

Dim PreVal As String
Dimma NextVal som sträng
Private Sub Worksheet_Activate()
PreVal = Range("A1")
NextVal = Range("A1")
End Sub
Privata delarkivsförändring (ByVal-mål som område)
Om (Target.Count = 1) Och (Target.Address = "$A$1") Då
NextVal = Range("A1")
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Om Target.Count = 1 Då
Om Target.Address = "$A$1" Då
PreVal = Range("A1")
ElseIf (Target.Address = "$B$1") Då
Om PreVal = NextVal Then
Application.EnableEvents = False
Range("A1"). Välj
Application.EnableEvents = True
End If
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
kan någon rätta till detta snälla >>>

Privata delarkivsförändring (ByVal-mål som område)
För i = 7 till 100
If Range("Cells(D, i)") = "Lån" Då
Range("Cells(V, i):Cells(X, i)").Locked = True
ElseIf Range("Cells(D, i)") = "Besparingar" Då
Range("Cells(Q, i):Cells(U, i)").Locked = True
Range("Cells(W, i):Cells(X, i)").Locked = True
ElseIf Range("Cells(D, i)") = "ShareCap" Då
Range("Cells(Q, i):Cells(U, i)").Locked = True
Range("Celler(V, i)"). Låst = Sant
End If
Nästa jag
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej! Kan någon hjälpa mig? Jag måste låsa/frysa en cell. Den cellen är länkad till en annan och har ett värde som ändras varje minut. Vad jag ska göra är att hålla värdet i en viss minut/timme. Hur kan jag göra det utan att kopiera det och klistra in det som ett värde?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Mira,
Jag kan tyvärr inte hjälpa till med detta, du kan ställa din fråga i vårt forum: https://www.extendoffice.com/forum.html för att få mer Excel-stöd från vår professionella.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Jag är verkligen ny på det här.
Jag har försökt sätta ihop ett faktureringssystem i excel.
Jag skapade 3 ark.
1. Fakturamall (Faktura) - Bara en generisk faktura som skickas till mina agenter varje vecka.

2. Ett datablad (Datablad) för att vara exakt - där fakturan kan läsa företagsnamn adress etc, så om något ändras kommer fakturan automatiskt att uppdateras.

3. En kalenderflik (Kalender 2018) för att vara exakt - som hänvisas till i fakturamallen, och sätter motsvarande datum och fakturanummer på de faktiska fakturorna.

Vad jag vill göra.
Kalenderfliken skulle vara min huvudsida, jag la till en statusrullgardinscell för varje vecka med alternativen "Aktiv" och "Stängd". Jag skulle vilja låsa hela fliken "Faktura" om motsvarande cell är inställd på "Stängd".

Jag hoppas att ni förstår vad jag försöker göra.
Tack på förhand.
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Ando Veres.
VBA-koden nedan kan hjälpa dig. Vänligen placera koden i arkkodsfönstret för Kalender 2018 ändring A1 i din rullgardinscell. Tack.

Privata delarkivsförändring (ByVal-mål som område)
Dim xRg As Range
On Error Resume Next
Ställ in xRg = Intersect(Target, Range("A1"))
Om xRg är ingenting, avsluta Sub
Om Target.Validation.Type >= 0 Då
Om Target.Value = "Stängt" Då
Sheets ("Datablad"). Skydda
ElseIf xRg.Value = "Aktiv" Då
Sheets ("Datablad"). Ta bort skydd
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag förbereder en lagerlagerhantering i excel-mall.För att leverera ett lager måste jag utfärda ett gatepass.Jag vill ha varje gatepass,motsvarande data kommer att uppdateras i daglig lagerupptagningssida.Med bytet av gatepassserienummer, rad kommer att låsas och nästa kommer att fyllas upp.
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Skulle vara trevligt om du kan ladda upp din arbetsbok här. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Kan du vägleda mig om vad som är fel här? Tack på förhand.

Privata delarkivsförändring (ByVal-mål som område)
Om Range("K:K") = "ÖVER LAGER" Då
Range("S:S").Locked = True
ElseIf Range("K:K") = "SLOW MOVING" Då
Range("S:S").Locked = True
ElseIf Range("K:K") = "NORMAL" Då
Range("S:S").Locked = False
ElseIf Range("K:K") = "SORTAGE" Då
Range("S:S").Locked = False
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Skulle du snällt ge mig råd om hur jag korrigerar detta? Tack på förhand.

Privata delarkivsförändring (ByVal-mål som område)
Om Range("A:A") = "LÅNGSAMT RÖRANDE" Då
Range("B:B").Locked = True
ElseIf Range("A:A") = "ÖVER LAGER" Då
Range("B:B").Locked = True
ElseIf Range("A:A") = "NORMAL" Då
Range("B:B").Locked = False
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Att inte vara en VB-expert skulle jag säga att du har för många "Elseif" - om du ändrar dem alla till bara IF förutom den sista så kommer det förhoppningsvis att fungera.
I grund och botten Om X gör detta, Om Y gör detta, om Z gör detta, om ingen av dessa - gör detta.
Denna kommentar minimerades av moderatoren på webbplatsen
Hur skulle koden vara om jag ville låsa ett block med celler (raderna 6, 7 och 8/bokstäverna D till U samt cellerna F5 och J5) och få dem att låsa upp när jag sätter ett "X" i cell E5? Tack på förhand!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej MitchyII,
Menar du att det angivna cellblocket har låsts manuellt i förväg och vill bara låsa upp dem genom att skriva ett "X" i cell E5?
Om du tar bort "X" från cell E5, vill du låsa intervallen igen?
Jag behöver mer information om problemet.
Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Mitchhyll (eller vem som helst), bygger på Crystal. Jag har manuellt låst alla celler och baserat på informationen i kolumn G skulle jag vilja att de förblir låsta eller upplåsta. Exempelceller i kolumn H ska ENDAST låsas upp om "c/p" placeras i föregående cell i kolumn G
Denna kommentar minimerades av moderatoren på webbplatsen
Är det möjligt att låsa en cell när den når ett visst värde?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, kan du snälla kolla varför det inte fungerar?

Privata delarkivsförändring (ByVal-mål som område)
If Range("A3:A37").Värde <> "" Då
Range("B3:B37"). Låst = Sant
ElseIf Range("A3:A37") = "" Då
Range("B3:B37"). Låst = Falskt
End If

If Range("B3:B37").Värde <> "" Då
Range("A3:A37"). Låst = Sant
ElseIf Range("B3:B37") = "" Då
Range("A3:A37"). Låst = Falskt
End If

End Sub


Tack så mycket på förhand!!!
Denna kommentar minimerades av moderatoren på webbplatsen
Hi
Jag har precis provat att använda koden ovan
och det står typ 13 fel när jag försöker använda den.
kan du hjälpa mig med detta?

tack
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Vilken Excel-version använder du?
Denna kommentar minimerades av moderatoren på webbplatsen
hi

om jag behöver låsa en cell på blad 2 (cell C4) baserat på ett påstående från blad 1 (cell C1),
om "nej" på blad 1 C4; blad 2 måste vara låst och det måste överföra värdet från blad 1 C4,
till blad 2 C4.

om "ja" på blad 1 måste jag kunna skriva i cellen på blad 2

Tack Benthe
Denna kommentar minimerades av moderatoren på webbplatsen
Hej snälla någon hjälp mig för VBA-kod.

om jag väljer från rullgardinsmenyn i cellen Range(A1:A1000) "abc" så lås inte Range(D1:D1000) till (F1:F1000)



om jag väljer från rullgardinsmenyn i cellen Range(A1:A1000) "abc" så lås inte Range(D1:D1000) till (F1:F1000)



om jag väljer från rullgardinsmenyn i cellen Range(A1:A1000) "abc" lås sedan Range(D1:D1000) till (F1:F1000)



dvs respektive cell A1 för D1 till F1



A2 för för D2 till F2
Denna kommentar minimerades av moderatoren på webbplatsen
Jag kopierade allt från ovan till ett ark. Det fungerade en sekund och nu får jag felet 'Kan inte ställa in låst egenskap för Range-klassen'. Jag öppnade till och med ett helt nytt ark och kopierade ditt exempel ordagrant. Någon aning om vad som händer?
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,

Jag behöver din tjänst. När jag väljer Inget alternativ från en cell vill jag att kolumnerna nedan ska vara låsta/gråa.

Är det möjligt? Jag provade den här formeln men det fungerade inte

Privata delarkivsförändring (ByVal-mål som område)

Om Range("D90") = "Ja" Då

Range("C94:F104"). Låst = Falskt

ElseIf Range("D90") = "Nej" Då

Range("C94:F104"). Låst = Sant

End If

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Steffi,
Koden fungerar bra.
Om du vill låsa cellintervallet för att förhindra redigering måste du skydda kalkylbladet manuellt efter att ha valt Inget alternativ i D90.
Och eftersom D90 är i intervallet C94:F104, efter att ha skyddat kalkylbladet, kan D90 inte heller redigeras.
Denna kommentar minimerades av moderatoren på webbplatsen
D90 finns inte i sortimentet. Det är 4 rader över C94
Det finns inga kommentarer här ännu
Ladda fler
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL