Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

bloccare le celle dopo il salvaggio

Ultimo Aggiornamento: 27/04/2019 12:43
24/04/2019 12:02

Buongiorno a tutti e grazie in anticipo.
Ho la seguente necessità: ho bisogno che alcune celle contenute in un file vengano bloccate e quindi impedire di modificare i dati inseriti. Il blocco delle celle deve avvenire dopo il salvataggio.
Attualmente uso questo codice:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:S10000")) Is Nothing Then
Me.Unprotect "Psw" 'sostituisci con la tua password
Target.Locked = True
Me.Protect "Psw"
End If
End Sub

Questo codice però mi blocca le celle subito dopo l'inserimento (quindi spostandosi in un'altra cella). E' possibile modificare e farle bloccare dopo il salvataggio?
Grazie
Post: 685
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
24/04/2019 16:50

Ciao
Come hai detto tu credo non si possa fare.
Puoi provare con l'Evento Deactivate del Foglio (li bloccherebbe quando esci dal Foglio, ma te li ritroveresti bloccate se torni nel Foglio indipendentemente dal salvataggio).

Un'altra cosa. Ll tuo codice credo che blocchi solo la cella attiva (cioè target) non l'intero intervallo.

Ciao,
Mario
24/04/2019 22:19

Scusami non sono molto pratico, mi potresti indicare come modificare il codice
Post: 686
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
24/04/2019 22:50

Ciao
Option Explicit
Private Sub Worksheet_Deactivate()
  Me.Unprotect "Psw" 'sostituisci con la tua password
  Range("A1:S10000").Locked = True
  Me.Protect "Psw"
End Sub


Fai sapere. Ciao,
Mario
Post: 788
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
25/04/2019 01:32

Un saluto a tutti.
Potresti anche togliere la gestione della protezione del Foglio dalla gestione dell'evento Worksheet_Change e spostarla nella gestione dell'evento Workbook_BeforeSave o Workbook_BeforeClose, che andrai ad aggiungere, lasciando al Worksheet_Change solo il compito del cambio di stato della cella da 'Non Protetta' a 'Protetta' che diverrà attivo solamente al salvataggio del file o alla sua chiusura.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
25/04/2019 10:19

Cortesemente mi puoi scrivere come andrebbe riscritto l'intero codice? Grazie
Post: 791
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
25/04/2019 18:02

Sembrava più facile gestire il blocco delle celle e permetterne la modifica per tutto il tempo della sessione di lavoro fino al Salva o Chiudi pertanto ho predisposto un'altra soluzione (funzionante) che però va valutata nell'insieme del progetto completo e che propongo.
Non faccio più uso del evento Worksheet_Change all'interno del foglio ma solo degli eventi Workbook_BeforeSave e Workbook_BeforeClose.
In pratica il flag del blocco delle celle viene inserito solo se salvo (menu Salva) o alla fine della sessione (Chiudi con Salva) a tutte le celle compilate nel range previsto "A1:S10000"). Quelle ancora vuote rimarranno libere e disponibili per la successiva sessione di lavoro.
Le celle marcate "Bloccate" non potranno essere modificate in quanto il foglio è Protetto mentre le altre saranno liberamente inseribili e modificabile fino al primo Salva o Chiudi. Chiaramente al primo utilizzo del foglio, ovvero alla sua inizializzazione, a tutte le celle nel range va tolto la spunta su "Bloccato".
Pertanto, nel modulo vba ThisWorkbook (Questa_cartella_di_lavoro) vanno messe queste due sole macro. L'esempio è predisposto per il Foglio1, eventualmente va adeguato alle proprie esigenze.
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim cella As Range
    Sheets(1).Unprotect "Psw"
    For Each cella In Sheets(1).Range("A1:S10000")
        If Not IsEmpty(cella) Then
            cella.Locked = True
        End If
    Next cella
    Sheets(1).Protect "Psw"
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim cella As Range
    Sheets(1).Unprotect "Psw"
    For Each cella In Sheets(1).Range("A1:S10000")
        If Not IsEmpty(cella) Then
            cella.Locked = True
        End If
    Next cella
    Sheets(1).Protect "Psw"
End Sub
[Modificato da rollis13 25/04/2019 18:31]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
26/04/2019 15:03

Ho inserito il codice da te indicato. Ho compilato una cella poi ho fatto salva ma poi ritornando sul file la cella era sempre editabile
Post: 687
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
26/04/2019 16:06

Ciao a tutti

Fabio attento che il codice di Rollis (ciao Rolando) funziona solo nel PRIMO FOGLIO o, meglio, in Sheets(1)
Se tu hai messo il codice, per esempio, nel secondo foglio, non funziona.

Ciao,
Mario
26/04/2019 16:15

Ciao, il mio contenuto è tutto inserito nello sheet 1. Ho rinominato questo sheet e si chiama Lista
Post: 792
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
26/04/2019 16:36

Come avrai notato ho scritto "(funzionante)" il che significa che ho anche messo del tempo per collaudare il codice che ho scritto, non ho solo espresso un'idea come avevo fatto nel post #5.

Se fornisci una traccia del tuo file (poche righe e senza dati sensibili) inserisco io le macro nel posto giusto (anche se avevo già dato le giuste indicazioni) e verifico anche che il tutto possa funzionare con il resto del progetto.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
26/04/2019 16:48

Grazie mille per la disponibilità.
In allegato il file.
Post: 793
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
26/04/2019 17:09

Sei stato poco attento, avevo scritto: "Pertanto, nel modulo vba ThisWorkbook (Questa_cartella_di_lavoro) vanno messe queste due sole macro."
Solo se vengono messe li in quel modulo vba vengono gestiti gli eventi Workbook_BeforeSave e Workbook_BeforeClose.

Inoltre, le righe successive al 1.100 sono utilizzate ? perché se elimini tutto quello che sta sotto fino alla fine del foglio il peso del file scende da circa 570KB a soli 96KB. Eventualmente, poi devi anche adeguare il range indicato nelle macro.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
26/04/2019 17:23

Potrebbero servire in un futuro.
Ammetto che sono poco esperto di codici però se vado in "questa cartella di lavoro" io il codice lo vedo.
Ho provato anche ad inserirlo li ex novo ma non si blocca la cella al salvataggio.
Post: 3.741
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
26/04/2019 17:56

Scusate se mi intrometto, se ho capito bene...
Con Excel2013, fare clic sul pulsante Seleziona tutto (casomai togliere la password)
Mouse destro/formatto celle/Protezione celle, sulla voce "Bloccata" togliere l'eventuale spunta oppure se il quadratino e nero cliccarci ancora sopra in modo che diventi bianco.

A questo punto togliere il codice Workbook_BeforeClose di rollis13
Chiudere e salvare
Quando si riapre le celle scritte sono bloccate.
[Modificato da raffaele1953 26/04/2019 18:00]
Excel 2013
26/04/2019 18:11

Ho capito dove sbagliavo, ora funziona. Ringrazio tutti per la pazienza e la collaborazione.
Post: 794
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
26/04/2019 18:58

@raffaele1953, in effetti in questo caso il controllo dell'evento BeforeClose è ridondante in presenza del BeforeSave e per una gestione 'normale" del progetto la sua macro può essere totalmente eliminata 👍.

L'avevo inserita solo per gestire il caso in cui l'utente preme il tasto "Chiudi" e poi ci ripensa e preme "Annulla" 😉.
[Modificato da rollis13 27/04/2019 16:57]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 3.744
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
27/04/2019 12:43

Comunque rollis13, hai risolto un bel lavoro
Excel 2013
Vota: 15MediaObject5,00118 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 10:42. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com