Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Cella con blocco copia incolla e inserimento PW

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 23/02/19 07:11

Ciao a tutti,
continuo nella finalizzazione di alcuni files.
Punto 1: protezione cella con PW dopo immissione dati.
con questo script ottengo il risultato atteso ( identificare il giorno e ora in cui è stato immesso il dato):
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Me.Range("D12:D4039")
    With Target
        If .Rows.Count = 1 Then
            If Not Intersect(Target, rng) Is Nothing Then
                .Offset(0, 7).Value = Now
                .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"
                '.Offset(0, 7).Protect Password:="123"
            End If
        End If
    End With
    Set rng = Nothing
End Sub

Ma vorrei che sia la cella della colonna D che quella della K dopo l'immissione fossero bloccate (con pw) da possibili cancellazioni o manomissioni.

Punto 2: evitare il copia e incolla dei dati
Sviluppato in questo modo:
Codice: Seleziona tutto
Private Sub Workbook_Open()

With Application
.CellDragAndDrop = False
.ExtendList = False
End With

Application.CommandBars("Cell").Enabled = False

Application.OnKey "^x", "FoxMsg"
Application.OnKey "^c", "FoxMsg"
Application.OnKey "^v", "FoxMsg"

Dim Ctrl As Office.CommandBarControl
For Each Ctrl In Application.CommandBars.FindControls(ID:=19)
Ctrl.Enabled = False
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=21)
Ctrl.Enabled = False
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=22)
Ctrl.Enabled = False
Next Ctrl

End Sub

Ma questo non "blocca" l'utilizzo dei classici pulsanti presenti in barra. E' fattibile in qualche modo?

https://www.dropbox.com/s/8fwm8xqah5tleuv/ORD_FORUM%20v1%2B.xls?dl=0
Grazie per l'aiuto.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Cella con blocco copia incolla e inserimento PW

Postdi Anthony47 » 23/02/19 20:46

Per il quesito 1, secondo me stai dimenticando che in Excel la protezione si fa a livello di foglio, ed e' l'eventuale "sprotezione", se vuoi farla in modo selettiva, che va fatta a livello di celle.
Nella situazione che immagino, devi quindi sproteggere le celle che vuoi lasciare accessibili all'operatore e poi proteggere il foglio con password; questo in fase di progettazione del foglio.

All'apertura del file procederei quindi a sproteggere il foglio e proteggerlo contro i soli comandi manuali:
Codice: Seleziona tutto
Sheets("MioFoglio").Unprotect Password:="Segretissima"       
Sheets("MioFoglio").Protect Password:="Segretissima", UserInterFaceOnly:=True 
In questo modo le macro potranno accedere alle aree protette, ma l'utente no.

Quanto alla prestazione di cui parli, la gestirai ad esempio con
Codice: Seleziona tutto
If .Offset(0, 7).Value ="" Then
    .Offset(0, 7).Value = Now
    .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"
End If


Il quesito 2 io non lo affronterei come stai facendo, perche' prima o poi qualcuno ti chiedera' conto del perche' gli modifichi le impostazioni di Excel senza il suo consenso e gliele lasci modificate.
Io mi limiterei a lavorare sugli eventi di worksheet:
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
With Application                '**** Vedi testo
    .CellDragAndDrop = False
    .ExtendList = False         '?? Perche'?
End With
Application.CutCopyMode = False
End Sub

Private Sub Worksheet_Deactivate()
With Application
    .CellDragAndDrop = True
    .ExtendList = True
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CutCopyMode = False
End Sub

Da mettere nel "Modulo di classe" del foglio su cui vuoi ostacolare il Copia/Incolla.
Ho detto "ostacolare" e non "impedire" perche' alcune circostanze consentono ancora di incollare; ad esempio copiare da un documento word e incollare su excel.

Nota****: Se decidi di manipolare la proprieta' CellDragAndDrop allora devi ripristinarla alla chiusura e alla deattivazione del workbook, per evitare le rimostranze dell'owner di Excel.

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17167
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 24/02/19 08:45

Ciao Anthony,
focalizzandoci sulla risoluzione del punto 1:
a) ho tolto il flag "bloccata" a tutte le celle delle colonne B:H
b) ho protetto il foglio con pw: "abc"
c) ho modificato lo script ( fatti tentativi ed incroci vari) di seguito l'ultima versione:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Me.Range("D12:D4039")
    With Target
        'If .Rows.Count = 1 Then
            'If Not Intersect(Target, rng) Is Nothing Then
            If .Offset(0, 7).Value = "" Then
                .Offset(0, 7).Value = Now
                .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"
            End If
        'End If
    End With
    Set rng = Nothing
End Sub

Ma il risultato ottenuto è che la colonna K è protetta da scrittura ma senza nessun valore presente che invece mi ritrovo sulla stessa riga ad intervalli di 7 colonne fino in fondo al foglio di lavoro :cry:

PS Nel file troverai anche le prove infruttuose per il punto 2 .......
https://www.dropbox.com/s/klurri5vd62ag19/ORD_FORUM%20v2.xls?dl=0

In realtà sul punto 1 durante la giornata di ieri avevo continuato a lavorarci, arrivando a questo script:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Me.Range("D12:D4039")
    With Target
        If .Rows.Count = 1 Then
            If Not Intersect(Target, rng) Is Nothing Then
                .Offset(0, 7).Value = Now
                .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"
                '.Offset(0, 7).Protect Password:="123"
            End If
        End If
    End With
    Set rng = Nothing
End Sub

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("K12:K4039")) Is Nothing Then

ActiveSheet.Unprotect

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

End Sub

Con i seguenti limiti:
a) attivo la protezione ma senza password specifica.
b) sembra funzionare "instabilmente" infatti può lavorare per varie digitazioni senza problemi e poi iniziare con avvisi debug ripetuti che interessano alternativamente questa parte dello script:
Codice: Seleziona tutto
       .Offset(0, 7).Value = Now
                .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"


Grazie per l'aiuto
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44

Re: Cella con blocco copia incolla e inserimento PW

Postdi Anthony47 » 24/02/19 21:33

Nel tuo ultimo messaggio trovo poche tracce del suggerimento che ti avevo dato

Riepilogo quanto ti suggerii:
-togli la protezione alle celle che vuoi lasciare di libera compilazione all'utente
-proteggi il foglio
-imposti una macro che all'apertura del file (quindi una Sub Workbook_Open nel modulo Questa_cartella_di_lavoro) sprotegga il foglio e lo ri-protegga con modalita' UserInterFaceOnly:=True
A spanne questa Sub avra' questo contenuto:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("QualeFoglio").Unprotect Password:="Passw"       '<<< NomeFoglio e password
Sheets("QualeFoglio ").Protect Password:="Passw", UserInterFaceOnly:=True  '<<<Idem
'. . . (eventuali altri Fogli)
'...
End Sub
-salvi il file e lo riapri

A questo punto il tuo foglio ha un tot di celle libere, e le altre (tra cui la colonna K) che sono scrivibili solo da macro.

Andiamo alla Sub Worksheet_Change. Essa deve fare le verifiche canoniche:
-che Target sia nell'area monitorata
-che Target sia di una sola cella

A questo punto puoi inserire il controllo che avevo detto (If .Offset(0, 7).Value ="" Then /End If)

Insomma, secondo me la Worksheet_Change dovrebbe avere il seguente contenuto
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Me.Range("D12:D4039")
If Not Intersect(Target, rng) Is Nothing And Target.Count = 1 Then
    With Target
        If .Offset(0, 7).Value = "" Then         '*** Vedi Testo
            .Offset(0, 7).Value = Now
            .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"
        End If
    End With
End If
Set rng = Nothing
End Sub

Gli eventi Worksheet_Activate e Worksheet_SelectionChange non interessano per il ragionamento che ho detto, le relative Sub sono da eliminare

Nota***: Aggiungo che secondo me sarebbe piu' opportuno, prima di inserire il timestamp in colonna K, controllare che il contenuto di Target sia diverso da "niente". Quindi
Codice: Seleziona tutto
        If .Offset(0, 7).Value = "" And Target.Value <> "" Then


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17167
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 25/02/19 13:47

Ciao Anthony, ti confermo che nel mio ultimo post avevo applicato tutti i suggerimenti:
Anthony47 ha scritto:Nel tuo ultimo messaggio trovo poche tracce del suggerimento che ti avevo dato

Riepilogo quanto ti suggerii:
-togli la protezione alle celle che vuoi lasciare di libera compilazione all'utente
-proteggi il foglio
-imposti una macro che all'apertura del file (quindi una Sub Workbook_Open nel modulo Questa_cartella_di_lavoro) sprotegga il foglio e lo ri-protegga con modalita' UserInterFaceOnly:=True


BG66 ha scritto:Ciao Anthony,
focalizzandoci sulla risoluzione del punto 1:
a) ho tolto il flag "bloccata" a tutte le celle delle colonne B:H
b) ho protetto il foglio con pw: "abc"
c) ho modificato lo script ( fatti tentativi ed incroci vari) di seguito l'ultima versione:

Non avevo scritto ma nel file era presente anche la modifica alla Sub Workbook_Open.

Unica differenza post tua ultima indicazione: utilizzo integrale del tuo script "Private Sub Worksheet_Change(ByVal Target As Range)"

Segnalazione debug ricevuta:
Immagine
Grazie per l'aiuto
https://www.dropbox.com/s/lprkbs1wg19giz2/ORD_FORUM%20v2%2B.xls?dl=0
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44

Re: Cella con blocco copia incolla e inserimento PW

Postdi Anthony47 » 25/02/19 16:07

La presenza di altre macro di evento, che includevano i comandi Protect e Unprotect, mi avevano fatto pensare a un approccio diverso da quello che avevo suggerito

Sulla base di quello che vedo, la mia migliore ipotesi e' che il foglio sia ancora pienamente protetto, e non in mpdalita' UserInterfaceOnly...

Vai nella finestra Immediata del vba, e quando ti succede il fattaccio digita il comando
Codice: Seleziona tutto
?sheets("Scatole").protectionmode
Dovrebbe restituire Vero; se restituisce Falso allora la mia ipotesi e' corretta.

Perche' potrebbe succedere?
-il file viene Aperto in modalita' Protetta, e quando gli dai il comando Abilita la macro di Workbook_Open hanno spesso errori di funzionamento. Dichiara il file "attendibile", o spostalo in una directory dichiarata "attendibile"
-perche' il file non e' stato ancora salvato, chiuso, e riaperto

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17167
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 25/02/19 22:58

Ciao Anthony,
effettivamente ho provato lo stesso file su altro pc e sembra funzionare egregiamente.
Nella giornata di domani riprovo sul pc in ufficio con il file nella partizione definitiva.
Se quanto sopra viene confermato, mi piacerebbe realizzare in toto la richiesta del primo post ossia:
Ma vorrei che sia la cella della colonna D che quella della K dopo l'immissione fossero bloccate (con pw) da possibili cancellazioni o manomissioni.

Quindi per bloccare anche la colonna D dopo l'inserimento come posso variare lo script ?

Nel frattempo ti auguro buona notte.

Gene

PS Chiuso questo punto poi approcciamo l'altro :lol:
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44

Re: Cella con blocco copia incolla e inserimento PW

Postdi Anthony47 » 26/02/19 01:29

Per proteggere anche colonna D, l'opzione piu' semplice e' che nella stessa macro che mette il timestamp su Target.Offset(0,7) modifichi anche l'impostazione della protezione di Target: devi solo aggiungere .Locked = True nel ciclo If .Offset(0, 7).Value.. /End If

Oppure (b), sempre nella stessa macro, crei una copia del valore inputato in colonna D; nella Worksheet_Change controlli se questo valore e' gia' compilato, e allora annulli il valore digitato con messaggio.

Oppure (c) proteggi anche la colonna D, e invece di scrivere direttamente nella cella fai scrivere in un InputBox (activex); ovviamente il codice di controllo dell'inputbox dovra' rifiutare di modificarsi se la cella e' gia' compilata.

Non ho tempo per proporre anche dei codici per le ipotesi b) e c), prova intanto a lavorarci da solo (se non basta la prima)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17167
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 02/03/19 08:05

Ciao Anthony,
scusa la latitanza ma ai malesseri stagionali si sono sommati gli impegni di fine mese...
Riassumendo:
a) punto 1: risolto con introduzione di .Locked = True
b) punto 2 (ossia bloccare copia incolla):
Ho creato un modulo di classe incollando il tuo suggerimento:
Io mi limiterei a lavorare sugli eventi di worksheet:...omissis...

Il risultato è che comunque permette il copia-incolla :?:
E' tra le prime volte che uso il modulo di classe e questo tuo specifico punto ( che sottolineo) ma fa pensare di aver sbagliato qualcosa:
Da mettere nel "Modulo di classe" del foglio su cui vuoi ostacolare il Copia/Incolla.


Altro dubbio: Lo script nel modulo di classe blocca il copia ed incolla con i bottoni e quindi per la sequenza tasti (Control+V, etc) devo lasciare lo script presente in "questa cartella di lavoro" ( che comunque non riesco a far funzionare :oops: ), ossia:
Codice: Seleziona tutto
Private Sub Workbook_Open()
'With Application
'.CellDragAndDrop = False
'.ExtendList = False
'End With
Sheets("Scatole").Unprotect Password:="abc"
Sheets("Scatole").Protect Password:="abc", UserInterFaceOnly:=True

Application.CommandBars("Cell").Enabled = False

'Application.OnKey "^x", "FoxMsg"
'Application.OnKey "^c", "FoxMsg"
'Application.OnKey "^v", "FoxMsg"

Dim Ctrl As Office.CommandBarControl
For Each Ctrl In Application.CommandBars.FindControls(ID:=19)
Ctrl.Enabled = False
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=21)
Ctrl.Enabled = False
Next Ctrl
For Each Ctrl In Application.CommandBars.FindControls(ID:=22)
Ctrl.Enabled = False
Next Ctrl

End Sub

Grazie per l'aiuto.
Gene
https://www.dropbox.com/s/05410dmf633tt0e/ORD_FORUM%20v3.xls?dl=0
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44

Re: Cella con blocco copia incolla e inserimento PW

Postdi Anthony47 » 02/03/19 11:32

Ho creato un modulo di classe incollando il tuo suggerimento:
Io mi limiterei a lavorare sugli eventi di worksheet:...omissis...

No, no; il modulo a cui faccio riferimento e' quello dove normalmente inserisci le macro "di evento" (tipo Worksheet_Activate, Worksheet_Change, etc) del singolo foglio; tecnicamente essi sono "Moduli di Classe".
Anche il modulo ThisWorkbook e' un "Modulo di Classe"
Per una overview guarda qui: viewtopic.php?f=26&t=103893&p=647675#p647675
(visto il tuo profilo mi ero permesso di non scendere a questo livello di spiegazioni)

La Sub Workbook_Open deve limitarsi alla gestione della protezione da scrittura, deve somigliare a quanto ti avevo suggerito qui: viewtopic.php?f=26&t=110402&p=648217#p648098

Insomma, nel file che hai allegato:
-sposta le Sub inserite nel modulo di classe nello stesso modulo in cui hai inserito la Sub Worksheet_Change
-rimuovi il modulo di classe
-nel modulo (di classe ;) ) Questa_cartella_di_lavoro cancella tutte le istruzioni successive a Sheets("Scatole").Protect Password:="abc", UserInterFaceOnly:=True

Salva, chiudi il file, chiudi Excel e riparti

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17167
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cella con blocco copia incolla e inserimento PW

Postdi BG66 » 02/03/19 13:22

[RISOLTO]

Ciao Anthony,
molto tempo fà un funzionario pubblico ad una mia contestazione specifica , mi aveva risposto che " anche la burocrazia ha un suo perchè"....in questo caso...anche l'etimologia ha un suo perchè.. ;)

Grazie ancora
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 227
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Cella con blocco copia incolla e inserimento PW":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti