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

Come bloccare o sbloccare le celle in base ai valori in un'altra cella in Excel?

In alcuni casi, potrebbe essere necessario bloccare o sbloccare le celle in base ai valori in un'altra cella. Ad esempio, è necessario che l'intervallo B1: B4 sia sbloccato se la cella A1 contiene il valore "Accettazione"; e da bloccare se la cella A1 contiene il valore "Rifiuto". Come puoi fare per raggiungerlo? Questo articolo può aiutarti.

Blocca o sblocca le celle in base ai valori in un'altra cella con codice VBA


Blocca o sblocca le celle in base ai valori in un'altra cella con codice VBA

Il seguente codice VBA può aiutarti a bloccare o sbloccare celle in base al valore in un'altra cella in Excel.

1. Fare clic con il pulsante destro del mouse sulla scheda del foglio (il foglio con le celle che è necessario bloccare o sbloccare in base ai valori in un'altra cella) e fare clic Visualizza codice dal menu di scelta rapida.

2. Quindi copia e incolla il seguente codice VBA nella finestra del codice.

Codice VBA: blocca o sblocca le celle in base ai valori in un'altra cella

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. premi il altro + Q contemporaneamente i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.

D'ora in poi, quando inserisci il valore "Accetta" nella cella A1, l'intervallo B1: B4 è sbloccato.

Quando si immette il valore "Rifiuto" nella cella A1, l'intervallo specificato B1: B4 viene bloccato automaticamente.


Articoli correlati:


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office / Excel 2007-2019 e 365. Supporta tutte le lingue. Facile distribuzione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce centinaia di clic del mouse ogni giorno!
fondo officetab
Commenti (50)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Come bloccare/sbloccare una cella variabile, ad esempio quando la cella è [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PAY",A16:L16,0))]
Questo commento è stato fatto dal moderatore sul sito
Voglio un semplice comando VBA che non riesco a capire per favore aiutatemi
Se la cella A1 è vuota, la cella A2 è bloccata e se la cella A1 contiene un valore, la cella A2 è sbloccata
Allo stesso modo, se la cella A2 è vuota, la cella A3 è bloccata e se la cella A2 contiene un valore, la cella A3 è sbloccata
e così via tante celle quante sono le esigenze in qualsiasi parte del foglio.
Questo commento è stato fatto dal moderatore sul sito
Ciao, sto cercando di ottenere questo risultato, ma ottengo un errore che VBA non è in grado di impostare la proprietà Locked della classe Range se il foglio è stato protetto. L'annullamento della protezione del foglio annullerà il blocco della cella. Come aggirare questo? Grazie per qualsiasi aiuto.
Questo commento è stato fatto dal moderatore sul sito
Hai risolto? Ho lo stesso problema
Questo commento è stato fatto dal moderatore sul sito
Caro Memo,
Si prega di provare il codice VBA di seguito.

Foglio di lavoro secondario privato_Activate()
Se non ActiveSheet.ProtectContents allora
Intervallo ("A1"). Bloccato = Falso
Intervallo ("B1: B4"). Bloccato = Falso
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRg come intervallo, xRgA come intervallo
On Error Resume Next
Application.EnableEvents = False
Imposta xRg = Intervallo ("B1:B4")
Imposta xRgA = Intervallo ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Oppure xRgA = "Accettando" allora
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
And Intersect(Target, xRg) = Target _
E xRgA.Value = "Rifiuto" Quindi
xRgA.Seleziona
End If
Application.EnableEvents = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ti consigliamo di utilizzare la riga dell'interfaccia nella cartella di lavoro in modo che quando apri il file, protegga i fogli ma consenta comunque alle macro di apportare modifiche;

Private Sub Workbook_Open() 'Questo va in "ThisWorkbook"

Fogli di lavoro ("Strumento per l'ordine"). Password di protezione:="Pwd", UserInterFaceOnly:=True

End Sub
Questo commento è stato fatto dal moderatore sul sito
Cara Formica,
Il codice VBA sottostante può aiutarti a risolvere questo problema. Grazie per il tuo commento.

Foglio di lavoro secondario privato_Activate()
Se non ActiveSheet.ProtectContents allora
Intervallo ("A1"). Bloccato = Falso
Intervallo ("B1: B4"). Bloccato = Falso
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRg come intervallo, xRgA come intervallo
On Error Resume Next
Application.EnableEvents = False
Imposta xRg = Intervallo ("B1:B4")
Imposta xRgA = Intervallo ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Oppure xRgA = "Accettando" allora
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
And Intersect(Target, xRg) = Target _
E xRgA.Value = "Rifiuto" Quindi
xRgA.Seleziona
End If
Application.EnableEvents = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao,

È possibile che questo VBA blocchi un set di celle/sblocchi un altro in base a questo? Ad esempio, l'intervallo B1:B4 è sbloccato e C1:C4 è bloccato per "accettare" e quindi B1:B4 è bloccato e C1:C4 è sbloccato per "rifiutare"?


Grazie,
cristiano
Questo commento è stato fatto dal moderatore sul sito
Caro cristiano,
Il tuo foglio di lavoro è protetto?
Questo commento è stato fatto dal moderatore sul sito
per favore qualcuno può aiutarmi con quanto segue.
Voglio inserire le foto di uno studente in un foglio, appare in un altro foglio in base ai loro nomi
Per creare un piano di navigazione per assistere gli utenti
Per assegnare uno o più fogli particolari a un utente
Per creare un'interfaccia per la cartella di lavoro
Per creare una pagina di accesso
Questo commento è stato fatto dal moderatore sul sito
Caro Leone,
Qualsiasi domanda su Excel, non esitare a postare nel nostro forum: https://www.extendoffice.com/forum.html.
Riceverai più supporti su Excel dal nostro professionista di Excel.
Questo commento è stato fatto dal moderatore sul sito
Ciao,

Ho provato il tuo codice e modifica un po ', ma non riesco a capire cosa sbaglio qui?

Private Sub Worksheet_Change (ByVal Target As Range)
Se Intervallo("A40") <> "" Allora
Intervallo("D40:E40").Bloccato = Falso
ElseIf Range("A40") = "" Allora
Intervallo ("D40:E40"). Bloccato = Vero
End If
End Sub


Il mio pensiero era se non c'è nulla in esso (A40). Quindi voglio bloccato da VBA. Se A40 contiene qualcosa, voglio che sia sbloccato. Spero che tu possa vederne il senso.


Saluti Kristoffer
Questo commento è stato fatto dal moderatore sul sito
Buon Giorno,
Non c'è niente di sbagliato nel tuo codice. Funziona bene per me.
Questo commento è stato fatto dal moderatore sul sito
Ciao. Anch'io non riesco a far funzionare questo codice. Non fa assolutamente nulla. Come se il codice non fosse nemmeno lì?? Sono molto nuovo di VBA e ho una conoscenza di base su di esso. Questo codice viene eseguito così com'è o deve essere aggiunto anche materiale per funzionare? O trasformato in una Macro (che non capisco davvero perché perché è una registrazione di istruzioni, a mio avviso)
Questo commento è stato fatto dal moderatore sul sito
QUALE SARÀ IL CODICE SE VOGLIO BLOCCARE LA CELLA E1, E2, E3 .............. PER TESTO SPECIFICO (DIRE "P") SULLA CELLA B1, B2, B3... ..............RISPETTIVAMENTE.

GRAZIE IN ANTICIPO
Questo commento è stato fatto dal moderatore sul sito
Buona Giornata
Si prega di provare sotto lo script VBA.

Private Sub Worksheet_Change (ByVal Target As Range)
Se Target.Count = 1 Allora
Se Target.Address = Range("A1").Address e Target.Value = "A" Allora
Intervallo ("B1"). Bloccato = Vero
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Quindi
Intervallo ("B2"). Bloccato = Vero
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Quindi
Intervallo ("B3"). Bloccato = Vero
End If
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao! bisogno di un consiglio.
C'è un modo per non consentire l'aggiornamento di una cella a meno che non abbia soddisfatto una condizione su un'altra cella?
Esempio: se la cella A non viene aggiornata non mi permetterà di modificare il valore della cella B per completare.

Apprezzo il feedback.
Grazie!
Questo commento è stato fatto dal moderatore sul sito
Cara Margia,
Si prega di provare sotto il codice VBA.

Dim PreVal come stringa
Dim NextVal come stringa
Foglio di lavoro secondario privato_Activate()
PreVal = Intervallo ("A1")
NextVal = Intervallo("A1")
End Sub
Private Sub Worksheet_Change (ByVal Target As Range)
Se (Target.Count = 1) e (Target.Address = "$A$1") Allora
NextVal = Intervallo("A1")
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Se Target.Count = 1 Allora
Se Target.Address = "$A$1" Allora
PreVal = Intervallo ("A1")
ElseIf (Target.Address = "$B$1") Allora
Se PreVal = NextVal Allora
Application.EnableEvents = False
Intervallo ("A1").Seleziona
Application.EnableEvents = True
End If
End If
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
qualcuno può correggere questo pls>>>

Private Sub Worksheet_Change (ByVal Target As Range)
Per i = 7 A 100
If Range("Cells(D, i)") = "Prestito" Allora
Intervallo("Cells(V, i):Cells(X, i)").Bloccato = True
ElseIf Range("Cells(D, i)") = "Risparmio" Allora
Intervallo("Cells(Q, i):Cells(U, i)").Bloccato = True
Intervallo("Cells(W, i):Cells(X, i)").Bloccato = True
ElseIf Range("Cells(D, i)") = "ShareCap" Allora
Intervallo("Cells(Q, i):Cells(U, i)").Bloccato = True
Intervallo("Celle(V, i)").Bloccato = Vero
End If
Avanti
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao! Qualcuno può aiutarmi? Devo bloccare/congelare una cella. Quella cella è collegata a un'altra e ha un valore che cambia ogni minuto. Quello che devo fare è mantenere il valore per un certo minuto/ora. Come posso farlo senza copiarlo e incollarlo come valore?
Questo commento è stato fatto dal moderatore sul sito
Cara Mira,
Spiacenti, non posso aiutarti con questo, puoi pubblicare la tua domanda nel nostro forum: https://www.extendoffice.com/forum.html per ottenere più supporti Excel dal nostro professionista.
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Sono davvero nuovo a questo.
Ho provato a mettere insieme un sistema di fatturazione in Excel.
Ho creato 3 fogli.
1. Modello di fattura (fattura): solo una fattura generica che viene inviata ai miei agenti settimanalmente.

2. Una scheda tecnica (Scheda tecnica) per l'esattezza - dove la fattura può leggere l'indirizzo del nome dell'azienda ecc, quindi se qualcosa cambia la fattura verrà automaticamente aggiornata.

3. Una scheda del calendario (Calendario 2018) per l'esattezza, a cui viene fatto riferimento nel modello di fattura e inserisce la data e il numero di fattura corrispondenti sulle fatture effettive.

Cosa voglio fare.
La scheda del calendario sarebbe la mia pagina principale, ho aggiunto una cella a discesa dello stato per ogni settimana con le opzioni "Attivo" e "Chiuso". Vorrei bloccare l'intera scheda "Fattura" se la cella corrispondente è impostata su "Chiusa".

Spero che capiate cosa sto cercando di fare.
Grazie in anticipo.
Questo commento è stato fatto dal moderatore sul sito
Caro Ando Veres.
Il codice VBA sottostante può aiutarti. Inserisci il codice nella finestra del codice del foglio di Calendar 2018 modifica A1 nella cella a discesa. Grazie.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRg come intervallo
On Error Resume Next
Imposta xRg = Interseca(Target, Intervallo("A1"))
Se xRg non è niente, esci da Sub
Se Target.Validation.Type >= 0 Allora
Se Target.Value = "Chiuso", allora
Fogli("Scheda Tecnica").Proteggi
ElseIf xRg.Value = "Attivo" Allora
Fogli ("Scheda tecnica"). Non protetto
End If
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Preparo una gestione delle scorte di magazzino in un modello excel. Per consegnare uno stock devo emettere un gate pass. Voglio per ogni gate pass, i dati corrispondenti verranno aggiornati nella pagina di scorta giornaliera. Con la modifica del numero di serie del gate pass, il la riga verrà bloccata e la successiva verrà riempita.
Questo commento è stato fatto dal moderatore sul sito
Buon Giorno,
Sarebbe bello se potessi caricare la tua cartella di lavoro qui. Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
Puoi guidarmi su cosa c'è che non va qui per favore? Grazie in anticipo.

Private Sub Worksheet_Change (ByVal Target As Range)
Se Range("K:K") = "SOVRA STOCK" Allora
Intervallo("S:S").Bloccato = Vero
ElseIf Range("K:K") = "MOVIMENTO LENTO" Allora
Intervallo("S:S").Bloccato = Vero
ElseIf Range("K:K") = "NORMALE" Allora
Intervallo("S:S").Bloccato = Falso
ElseIf Range("K:K") = "SHORTAGE" Allora
Intervallo("S:S").Bloccato = Falso
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Mi consigli gentilmente su come correggerlo? Grazie in anticipo.

Private Sub Worksheet_Change (ByVal Target As Range)
Se Range("A:A") = "MOVIMENTO LENTO" Allora
Intervallo ("B: B"). Bloccato = Vero
ElseIf Range("A:A") = "OVER STOCK" Allora
Intervallo ("B: B"). Bloccato = Vero
ElseIf Range("A:A") = "NORMALE" Allora
Intervallo("B:B").Bloccato = Falso
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Non essendo un esperto di VB, direi che hai troppi "Elseif" - se li cambi tutti in solo IF tranne l'ultimo, si spera che funzioni.
Fondamentalmente se X lo fa, se Y lo fa, se Z lo fa, se nessuno di questi - fallo.
Questo commento è stato fatto dal moderatore sul sito
Come sarebbe il codice se volessi bloccare un blocco di celle (righe 6, 7 e 8/lettere da D a U nonché celle F5 e J5) e sbloccarle quando inserisco una "X" nella cella E5? Grazie in anticipo!
Questo commento è stato fatto dal moderatore sul sito
Ciao Mitch II,
Vuoi dire che il blocco di celle specificato è stato bloccato manualmente in anticipo e vuoi solo sbloccarlo digitando una "X" nella cella E5?
Se rimuovi "X" dalla cella E5, vuoi bloccare nuovamente gli intervalli?
Ho bisogno di maggiori dettagli sul problema.
Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
Ciao Mitchyll (o chiunque altro), partendo da Crystal. Ho bloccato manualmente tutte le celle e, in base alle informazioni nella colonna G, vorrei che rimanessero bloccate o sbloccate. Le celle di esempio nella colonna H devono essere sbloccate SOLO se "c/p" è posizionato nella cella precedente nella colonna G
Questo commento è stato fatto dal moderatore sul sito
È possibile bloccare una cella, quando raggiunge un certo valore?
Questo commento è stato fatto dal moderatore sul sito
Ciao, potresti gentilmente verificare il motivo per cui non funziona?

Private Sub Worksheet_Change (ByVal Target As Range)
Se Intervallo("A3:A37").Valore <> "" Allora
Intervallo ("B3: B37"). Bloccato = Vero
ElseIf Range("A3:A37") = "" Allora
Intervallo("B3:B37").Bloccato = Falso
End If

If Range("B3:B37").Value <> "" Allora
Intervallo("A3:A37").Bloccato = Vero
ElseIf Range("B3:B37") = "" Allora
Intervallo("A3:A37").Bloccato = Falso
End If

End Sub


Grazie mille in anticipo!!!
Questo commento è stato fatto dal moderatore sul sito
Hi
Ho appena provato a usare il codice sopra
e dice errore di tipo 13 quando provo a usarlo.
potresti aiutarmi con questo?

grazie
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Quale versione di Excel stai utilizzando?
Questo commento è stato fatto dal moderatore sul sito
hi

se ho bisogno di bloccare una cella sul foglio 2 (cella C4) sulla base di un reclamo dal foglio 1 (cella C1),
se "no" sul foglio 1 C4; il foglio 2 deve essere bloccato e deve trasferire il valore dal foglio 1 C4,
al foglio 2 C4.

se "sì" sul foglio 1, devo essere in grado di digitare la cella sul foglio 2

Grazie Benthe
Questo commento è stato fatto dal moderatore sul sito
Ciao, per favore, qualcuno mi aiuti per il codice VBA.

se seleziono dall'elenco a discesa nella cella Intervallo (A1: A1000) "abc", non blocco Intervallo (D1: D1000) a (F1: F1000)



se seleziono dall'elenco a discesa nella cella Intervallo (A1: A1000) "abc", non blocco Intervallo (D1: D1000) a (F1: F1000)



se seleziono dal menu a discesa nella cella Intervallo (A1: A1000) "abc", quindi blocco Intervallo (D1: D1000) su (F1: F1000)



cioè rispettiva cella A1 per D1 a F1



A2 per da D2 a F2
Questo commento è stato fatto dal moderatore sul sito
Ho copiato tutto dall'alto in un foglio. Ha funzionato per un secondo e ora ricevo l'errore "Impossibile impostare la proprietà Locked della classe Range". Ho persino aperto un foglio completamente nuovo e ho copiato il tuo esempio alla lettera. Qualche idea su cosa sta succedendo?
Questo commento è stato fatto dal moderatore sul sito
Ciao,

Ho bisogno del tuo favore. quando seleziono Nessuna opzione da una cella, voglio che le colonne sottostanti siano bloccate/disattivate.

È possibile? Ho provato questa formula ma non funziona

Private Sub Worksheet_Change (ByVal Target As Range)

Se Intervallo("D90") = "Sì" Allora

Intervallo("C94:F104").Bloccato = Falso

ElseIf Range("D90") = "No" Allora

Intervallo ("C94: F104"). Bloccato = Vero

End If

End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao Steffi,
Il codice funziona bene.
Se si desidera bloccare l'intervallo di celle per impedire la modifica, è necessario proteggere manualmente il foglio di lavoro dopo aver selezionato Nessuna opzione in D90.
E poiché D90 è nell'intervallo C94:F104, dopo aver protetto il foglio di lavoro, non è possibile modificare nemmeno D90.
Questo commento è stato fatto dal moderatore sul sito
D90 non è nell'intervallo. Sono 4 righe sopra C94
Non ci sono ancora commenti pubblicati qui
Carica Altre
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite