Bloccare cella tramite macro.

Anonimo
2020-01-08T19:47:23+00:00

Ciao,

ho notato che l'argomento in oggetto è stato già trattato diverse volte, però non sono riuscito a trovare una soluzione.

Quello che mi serve è una semplice cosa e cioè:

se la cella H3 è vuota si può inserire un valore, altrimenti no.

Ho provato in questo modo:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("H3") <> "" Then

    Range("H3").Locked = True

Else

    Range("H3").Locked = False

End If

End Sub

ma mi esce il seguente errore:

Vladimiro

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-01-10T13:16:59+00:00

Ciao Vladimiro,

il link è sempre lo stesso, solo che la demo l'ho modificata inserendo i tuoi suggerimenti.

Allora il problema è il seguente:

se inserisco manualmente un valore nella cella H3 e successivamente provo a modificarlo, non me lo fa fare e dunque funziona bene.

Se invece comincio ad inserire i valori tramite i pulsanti VINTA o PERSA e provo a modificarli manualmente, me lo fa fare e questo non va bene.

Riassumendo:

vorrei bloccare la cella H3 al secondo inserimento a prescindere se il primo inserimento è avvenuto manualmente o tramite i suddetti pulsanti.

Vladimiro

Nelle tue procedure Rettangolo1A_Click e Rettangolo3A_Click, sostituisci:

   End Sub

con:

    ActiveSheet.Range(miaCella).MergeArea.Locked = True

End Sub

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-01-09T10:59:57+00:00

Ciao Vladimiro,

esce ugualmente lo stesso errore.

Al seguente link ho messo una demo; basta inserire un valore nella cella H3 per visualizzare l'errore.

Qui si vede il grande vantaggio di un file di esempio :-)

Il tuo problema è dovuto a due fattori:

  • non è possibile bloccare una cella su un foglio protetto
  • non è possibile bloccare una singola cella che fa parte di un'area di cella unita

Quindi prova:

'=========>>

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)    

    Const miaCella As String = "H3"                                   '<<=== Modifica

    Const sPassword As String = "MiaPassword"                '<<=== Modifica

    With Me

        If Not Intersect(.Range(miaCella), Target) Is Nothing Then

          If Not .Range(miaCella).Value = vbNullString Then

            .Unprotect Password:=sPassword

            .Range(miaCella).MergeArea.Locked = True

            .Protect Password:=sPassword

            End If

        End If

    End With

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

19 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-01-09T20:45:28+00:00

    Ciao Vladimiro,

    o capito, basta eliminare l'inserimento della password tramite macro e togliere il segno di spunta a quelle celle che non vuoi bloccare.

    Adesso è' sorto un problema che non riesco a risolvere.

    Nel momento in cui tramite il RESET svuoto i dati compresa la cella H3, non ho più possibilità di inserire, sempre nella cella H3 nuovamente un valore.

    Cosa si può fare?

    Potresti gentilmente postare il codice collegato al pulsante RESET ?

    ===

    Regards,

    Norman

    Ciao Norman,

    Sub Rettangolo2A_Click()

        Const sPassword As String = "MiaPassword"

    If Range("H3") = "" Then

        Beep

        Exit Sub

    End If

    If MsgBox("      CONFERMI ?", vbInformation + vbYesNo) = vbNo Then

    Else

        'ActiveSheet.Unprotect Password:=sPassword

        With Application

            .EnableEvents = False

            .ScreenUpdating = False

            .Calculation = xlCalculationManual

        End With

        Range("E4:E8") = 2

        Range("C7:C8") = ""

        Range("G7:G8") = ""

        Range("H3") = ""

        Range("H7") = ""

        Range("J3") = ""

        Range("B4:B8").Interior.Color = vbWhite

        Range("B4").Interior.Color = vbYellow

    End If

        With Application

            .EnableEvents = True

            .ScreenUpdating = True

            .Calculation = xlCalculationAutomatic

        End With

        'ActiveSheet.Protect Password:=sPassword

    End Sub

    Vladimiro

    Ciao Norman,

    ho risolto in questo modo:

    Sub Rettangolo2A_Click()

        Const sPassword As String = "MiaPassword"

        Const miaCella As String = "H3"

    If Range("H3") = "" Then

        Beep

        Exit Sub

    End If

    If MsgBox("      CONFERMI ?", vbInformation + vbYesNo) = vbYes Then

        ActiveSheet.Unprotect Password:=sPassword

        With Application

            .EnableEvents = False

            .ScreenUpdating = False

            .Calculation = xlCalculationManual

        End With

        Range("E4:E8") = 2

        Range("C7:C8") = ""

        Range("G7:G8") = ""

        Range("H3") = ""

        Range("H7") = ""

        Range("J3") = ""

        Range("B4:B8").Interior.Color = vbWhite

        Range("B4").Interior.Color = vbYellow

    End If

        Range(miaCella).MergeArea.Locked = False'ho aggiunto questo rigo di codice

        With Application

            .EnableEvents = True

            .ScreenUpdating = True

            .Calculation = xlCalculationAutomatic

        End With

        ActiveSheet.Protect Password:=sPassword

    End Sub

    C'è ancora un problema però.

    Mi sono accorto che la modifica nella cella H3 è bloccata solo se il primo inserimento avviene manualmente, cioè direttamente nella cella, mentre se l'inserimento iniziale avviene tramite i due pulsanti VINTA o PERSA il valore al suo interno si può modificare e questo non va bene.

    Un'altra cosa.

    Tornando al discorso dell'MsgBox personalizzato, mi sono accorto che le formule restano visibili:

    C'è un modo per rendere le formule all'interno delle celle invisibili?

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-01-09T19:13:51+00:00

    Ciao Vladimiro,

    o capito, basta eliminare l'inserimento della password tramite macro e togliere il segno di spunta a quelle celle che non vuoi bloccare.

    Adesso è' sorto un problema che non riesco a risolvere.

    Nel momento in cui tramite il RESET svuoto i dati compresa la cella H3, non ho più possibilità di inserire, sempre nella cella H3 nuovamente un valore.

    Cosa si può fare?

    Potresti gentilmente postare il codice collegato al pulsante RESET ?

    ===

    Regards,

    Norman

    Ciao Norman,

    Sub Rettangolo2A_Click()

        Const sPassword As String = "MiaPassword"

    If Range("H3") = "" Then

        Beep

        Exit Sub

    End If

    If MsgBox("      CONFERMI ?", vbInformation + vbYesNo) = vbNo Then

    Else

        'ActiveSheet.Unprotect Password:=sPassword

        With Application

            .EnableEvents = False

            .ScreenUpdating = False

            .Calculation = xlCalculationManual

        End With

        Range("E4:E8") = 2

        Range("C7:C8") = ""

        Range("G7:G8") = ""

        Range("H3") = ""

        Range("H7") = ""

        Range("J3") = ""

        Range("B4:B8").Interior.Color = vbWhite

        Range("B4").Interior.Color = vbYellow

    End If

        With Application

            .EnableEvents = True

            .ScreenUpdating = True

            .Calculation = xlCalculationAutomatic

        End With

        'ActiveSheet.Protect Password:=sPassword

    End Sub

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-01-09T19:09:54+00:00

    Ciao Vladimiro,

    o capito, basta eliminare l'inserimento della password tramite macro e togliere il segno di spunta a quelle celle che non vuoi bloccare.

    Adesso è' sorto un problema che non riesco a risolvere.

    Nel momento in cui tramite il RESET svuoto i dati compresa la cella H3, non ho più possibilità di inserire, sempre nella cella H3 nuovamente un valore.

    Cosa si può fare?

    Potresti gentilmente postare il codice collegato al pulsante RESET ?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento