Codice VBA non funziona

Ho il seguente codice VBA:

Problema

 Private Sub Worksheet_Change (ByVal Target As Range) Dim cRow As Integer Se Intersect (Target, Range ("R11: R20")) Non è Nothing Then Exit Sub If Target.Value = "F" Then ActiveSheet.Unprotect cRow = Target.Row Range (Celle (cRow, "T"), Celle (cRow, "U")). Locked = True ActiveSheet.Protect End If If Target.Value = "T" O Target.Value = "" Quindi ActiveSheet.Unprotect cRow = Target .Row Range (Celle (cRow, "T"), Celle (cRow, "U")). Locked = False ActiveSheet.Protect End If End Sub 

Quello di cui ho bisogno è ClearContents per (cRow target.Row) in maiuscolo prima che sia bloccato.3

  • Dispongo di un foglio Excel per calcolare gli straordinari, include diverse righe per ogni mese e il foglio è protetto ma consente all'utente di inserire dati in un intervallo specificato (P11: P20, R11: X20) (Consenti all'utente di modificare l'intervallo).
  • Inoltre, l'intervallo (R11: R20) è costituito da righe con un menu a discesa di 4 valori (1, 2, 3, 4).
  • Il mio caso: Ad esempio, se l'utente ha selezionato SOLO il valore 3 o 4 nella cella (R15) ho bisogno di bloccare o proteggere l'intervallo (T15: U15) e se poi con lo stesso foglio selezionato il valore 3 o 4 nella cella R19 per proteggere l'intervallo (T19: U19) e così via.
  • Pertanto ho bisogno se qualche valore selezionato in una cella specifica per proteggere alcuni intervalli all'interno della stessa riga. Si prega di notare che l'utente può selezionare una selezione o multi selezione nello stesso foglio.

Soluzione

Per la tua query corrente ho supposto di voler cancellare il contenuto delle colonne T e U della riga di destinazione.

 Private Sub Worksheet_Change (ByVal Target As Range) Dim cRow As Integer Se Intersect (Target, Range ("R11: R20")) Non è Nothing Then Exit Sub If Target.Value = "F" Then ActiveSheet.Unprotect cRow = Target.Row With Intervallo (Celle (cRow, "T"), Celle (cRow, "U")) .ClearContents .Locked = True End Con ActiveSheet.Protect End If If Target.Value = "T" O Target.Value = "" Quindi ActiveSheet .Unprotect cRow = Target.Row Range (Celle (cRow, "T"), Celle (cRow, "U")). Locked = False ActiveSheet.Protect End If End Sub 

Grazie a TrowaD per questo suggerimento.

Articolo Precedente Articolo Successivo

I Migliori Consigli