Blocco celle dopo inserimento



  • Blocco celle dopo inserimento
    di Klaudio (utente non iscritto) data: 14/09/2014 10:35:58

    Salve! sul forum ho trovato questo codice che fa al caso mio:

    Codice di
    Private Sub Worksheet_Activate()
    Cells.Select
    Selection.Locked = False
    ActiveSheet.Protect
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("B3:P210")) Is Nothing Then

    ActiveSheet.Unprotect

    If Target.Value <> "" Then
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If
    End If

    End Sub

    ma ho un problema, nella cartella di lavoro ci sono più fogli simili, inserendo il codice in questione su più fogli quando vado a cambiare foglio mi restituisce l'errore:

    Errore di run-time'1004':
    Impossibile impostare la proprietà Locked per la classe Range.
    Qualcuna sa dirmi il perchè?
    P.S. Anticipo che non so nulla di programmazione.
     
    Private Sub Worksheet_Activate()
    Cells.Select
    Selection.Locked = False
    ActiveSheet.Protect
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       
    If Not Intersect(Target, Range("A4:A1000")) Is Nothing Then
    
    ActiveSheet.Unprotect
    
    If Target.Value <> "" Then
        Selection.Locked = True
        Selection.FormulaHidden = False
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If
    End If
    
    End Sub



  • di lepat (utente non iscritto) data: 14/09/2014 11:08:02

    forse sarebbe meglio spiegare bene qual'è il tuo obiettivo



  • di Klaudio (utente non iscritto) data: 14/09/2014 11:28:07

    L'obbiettivo è quello di bloccare una cella dopo aver inserito un valore. mi spiego, gestisco dei campionati, in ogni foglio raccolgo i punteggi di ciscuna serie e per evitare di cancellarli involontariamente vorrei qualcosa di come ho trovato.



  • di lepat (utente non iscritto) data: 14/09/2014 11:43:10

    vuoi bloccare una cella soltanto ? un range di celle ? tutte ? su un foglio solo ? su tutti ? e se vuoi rimodificarle ?



  • di Zer0Kelvin data: 14/09/2014 14:17:18

    Ciao.
    A prescindere dalla validità/utilità del codice esposto, probabilmente l'errore è prodotto da Worksheet_Activate, in quanto cerca di agire su un foglio protetto senza prima sproteggerlo
     
    Private Sub Worksheet_Activate()
        ActiveSheet.Unprotect '<===
        Cells.Select
        Selection.Locked = False
        ActiveSheet.Protect
    End Sub
    



  • di Klaudio (utente non iscritto) data: 14/09/2014 18:34:36

    il blocco deve riguardare un Range di celle "B3:P210" su più fogli della cartella non su tutti, se devo rimodificarle un messaggio mi dice di rimuovere la protezione del foglio dalla scheda revisione.
    P.S. non ricordo dove ho letto il mess di errore che ho scritto nella domanda sopra.
    adesso il messaggio di errore che restituisce, dopo che ho inserito i valori nelle celle e risultano bloccate, quando cambio foglio è:

    Errore di run-time '7':
    Memoria esaurita



  • di Zer0Kelvin data: 14/09/2014 19:14:10

    E' probabile che sia dovuto ad una ricorsione indesiderata.
    Se, ad esempio, si modifica una cella all'interno di Worksheet_Change, l'evento Worksheet_Change verrà richiamato nuovamente, e così via fino ad ottenere l'errore di cui parlavi.
    Per evitare che questo accada, devi disabilitare gli eventi con:
    Application.EnableEvents = False
    all'inizio della routine e ripristinarli alla fine con:
    Application.EnableEvents = True



  • di Klaudio (utente non iscritto) data: 14/09/2014 19:44:54

    Grazie del tempo che mi avete dedicato, ci rinuncio e amen.