Condividi tramite

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-09T12:08:56+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

    Ciao Norman,

    naturalmente funziona! :-)

    Prima di chiudere il thread, vorrei approfittare per chiederti un'altra cosa.

    E' possibile evitare il seguente avviso:

    magari con qualcosa scritto da me?

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-01-08T21:37:24+00:00

    Ciao Vladimiro,

    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:

    Prova a sostituire il tuo codice con qualcosa del genere:

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

    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

                .Unprotect Password:=sPassword

                .Range(miaCella).Locked = True

                .Protect Password:=sPassword

            End If

        End With

    End Sub

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

    ===

    Regards,

    Norman

    Ciao Norman,

    esce ugualmente lo stesso errore.

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

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-01-08T20:50:05+00:00

    Ciao Vladimiro,

    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:

    Prova a sostituire il tuo codice con qualcosa del genere:

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

    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).Locked = True

                .Protect Password:=sPassword

                End If

            End If

        End With

    End Sub

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

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento