Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Proteggere codice vba

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

Re: Proteggere codice vba

Postdi ricky53 » 15/03/13 01:06

Ciao,
detto che la protezione in qualunque modo sia stata realizzata in excel è facilmente violabile e che proteggere serve SOLO e ESCLUSIVAMENTE ad impedire cancellazioni accidentali passiamo a farti uno schema sul quale lavorare:

1. proteggi il progetto con PSW
2. proteggi i vari fogli ove ti occorre
3. crea un nuovo foglio di nome "BASE" ("Menu" o come vuoi)
4. all'apertura tutti i fogli saranno nascosti (con "VeryHidden") sarà visibile solo "BASE"
5. se le macro non vengono attivate non si potrà vedere nulla tranne BASE, non si potrà andare nel codice (sempre a meno di violazioni di chi vuole a tutti i costi aprire il file)
6. chiedere una PSW per scoprire tutti i fogli
7. lavorare sul file
8. alla chiusura si nascondono tutti i fogli lasciando visibile solo "Base"

per nascondere/scoprire i fogli si utilizzerà il ciclo di prima
Codice: Seleziona tutto
Option Compare Text

Sub Nascondi()
    Dim I As Integer
    For I = 1 To Worksheets.Count
'        If UCase(Sheets(I).Name) <> "BASE" Then
        If Sheets(I).Name <> "BASE" Then
            On Error Resume Next
            Sheets(I).Visible = xlSheetVeryHidden ' 2
        End If
    Next I
End Sub

Sub Scopri()
    Dim I As Integer
    For I = 1 To Worksheets.Count
        If Sheets(I).Name <> "BASE" Then
            On Error Resume Next
            Sheets(I).Visible = xlVisible ' -1
        End If
    Next I
End Sub


Adesso vai avanti tu
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Sponsor
 

Re: Proteggere codice vba

Postdi raimea » 15/03/13 06:45

ciao
sottoscrivo quanto scritto da francesco53 , nulla da ridire.

vero anche cio che fa notare antony:
ovviamente con quel codice prima o poi succedera' anche a te

mentre l'ultimo post di ricky453 "va fuori tema"
cio che scrive e' correto , x proteggere i fogli ecc...

ma la mia richesta e' diversa:
vorrei proteggere un mio file oltre che con la paswr nel vba
con un controllo all'apertura del file.

vorrei che all'apertura vado a controllare una particolare scritta in una determinata cella A1
di alcuni fogli, se la scritta e' diversa , o non c'e chiudere il file.

i fogli e il cod vba lo so proteggere.
l'osservazione di riky53 precedente e' si' corretta:
devi fare un ciclo For/Next su Vettm(I) dove "I" è la variabile del ciclo

cio provato ma non riesco a venirne a capo.
vi ringrazio
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi Francesco53 » 15/03/13 09:48

Buongiorno a tutti,
per far capire quanto sia aleatoria ogni protezione, quando devo studiare o capire qualche macro interessante,
io non utilizzo programmi particolari, basta usare open office, ci permette di entrare nel file e visualizzare tutte
le macro, stamparle e di conseguenza ricrearle.
Il vero problema (come dice Ricky) è preservare il foglio da modifiche o manomissioni che impedirebbero il giusto utilizzo.
Non penso che ci sia qualcuno che utilizzi commercialmente i file, sarebbe sciocco visto la non protezione, per cui
penso sia solo una questione personale di voler preservare il proprio lavoro.
Un caro saluto a tutto il Forum.
Francesco
S.O. Vista e Office 2007
Francesco53
Utente Senior
 
Post: 647
Iscritto il: 20/02/10 18:45

Re: Proteggere codice vba

Postdi ricky53 » 15/03/13 10:50

Ciao Raimea,
la mia proposta era un punto di partenza sul quale lavorare e serve COMUNQUE nel caso in cui l'utente non attivi le macro.

Occorre agire anche sulla chiusura/apertura del file con i controlli sulla cella "A1" dei tuoi fogli ... puoi farlo sfruttando il codice che ti ho inviato (la parte del ciclo FOR/Next c'è va copiata e implementata).
Il codice che ti ho inviato puoi applicarlo in chiusura in modo da avere un solo file visibile.

Avendo già provato, invia il codice che hai scritto e lo vediamo insieme?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Proteggere codice vba

Postdi Flash30005 » 15/03/13 10:59

Inserisci questo codice in Thisworkbook (o Questa_Cartela_di_Lavoro)
Codice: Seleziona tutto
Private Sub Workbook_Open()
Dim VettM(3) As String
VettM(1) = "3su5.bwin"
VettM(2) = "calendario"
VettM(3) = "masaniello"
For NF = 1 To 3
If Sheets(VettM(NF)).Range("A1").Value <> "abc" Then ThisWorkbook.Close savechanges:=False
Next NF
End Sub


"abc" è la stringa che deve stare nella cella A1 di ogni foglio elencato

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Proteggere codice vba

Postdi ricky53 » 15/03/13 12:11

Ciao Raimea,
leggi la proposta di Falsh.

Rimane da gestire il caso in cui l'utente non attivi le macro.
In questa situazione il file verrà aperto e si potrà operare sui vari fogli del tuo file. Per evitare (limitare gli interventi) puoi applicare la mia soluzione di prima ossia (è sempre un palliativo):
1. proteggere il progetto VBA con PSW
2. inserire un foglio "BASE" vuoto e libero
3. nascondere tutti gli altri fogli
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Proteggere codice vba

Postdi raimea » 15/03/13 18:31

ciao
okk

pur condividenndo tutti i consigli ,
al momento mi serviva proprio come chiedevo,
e la macro di flash assolve a quanto richiesto.
grazie a tutti.
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi ricky53 » 15/03/13 18:40

Ciao,
BENE per aver risolto.

Io sono curioso (per natura e molto di più per esperienza) di sapere cosa succede se un utente mette in atto quanto ti avevo scritto: "Rimane da gestire il caso in cui l'utente non attivi le macro."

Tu hai provato a non attivare le macro?
Cosa succede ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Proteggere codice vba

Postdi raimea » 15/03/13 18:54

ciao
se non si attivano le macro si vedono tutti i fogli
(vba no xche ha paswr), ma rimane un file inutile senza poter automatizzare le varie funzioni.

il file mette gia in automatico la protezione al foglio, quando girano le macro

se si cancella il contenuto di A1 il file non si apre piu,'
e' cio che voglio . :D

ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi ricky53 » 15/03/13 21:35

Ciao,
Bene.

Buona prosecuzione e ... alla prossima.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Proteggere codice vba

Postdi raimea » 16/03/13 07:15

ciao
in maniera un po' grezza sono riuscito a far apparire un messaggio nel caso di intervento della protezione
ho aggiunto un IF:

Codice: Seleziona tutto
If Sheets(VettM(NF)).Range("A1").Value <> "abc" Then MsgBox "il file e' stato modificato "
If Sheets(VettM(NF)).Range("A1").Value <> "abc" Then ThisWorkbook.Close savechanges:=False


vorrei unire in un unico comando if
so' che si puo con un "and", unire tutto in un unico if , ma non ci sono riuscito... :-?

vi ringrazio
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi Francesco53 » 16/03/13 09:09

ciao prova così:
Codice: Seleziona tutto
If Sheets(VettM(NF)).Range("A1").Value <> "abc" Or Sheets(VettM(NF)).Range("A1").Value <> "abc" Then
        p = MsgBox("Il foglio è stato manomesso!", vbOKOnly + vbCritical)
        ActiveWorkbook.Close savechanges:=True
    End If

Prova io ho variato il savechanges in true, questo dovrebbe salvare il file e non consentirne più l'apertura.
buona giornata a tutti
Francesco
S.O. Vista e Office 2007
Francesco53
Utente Senior
 
Post: 647
Iscritto il: 20/02/10 18:45

Re: Proteggere codice vba

Postdi Anthony47 » 16/03/13 10:03

Raimea ha scritto:ciao
se non si attivano le macro si vedono tutti i fogli
(vba no xche ha paswr), ma rimane un file inutile senza poter automatizzare le varie funzioni.

E se invece disabilita solo le macro all' apertura, col Maiusc?

Inoltre suggerisco di evitare il messaggio: se il foglio non si apre dopo un po' di tentativi l' utente medio la smette, se invece gli dici che non vuoi farlo aprire si incaponisce e fa una google search che gli risolve l' arcano...

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Proteggere codice vba

Postdi raimea » 16/03/13 13:23

ciao
la macro di francesco va bene,
non so' cosa intendi :
e non consentirne più l'apertura.

xche quando si ri.prova ad aprire da (correttamente) , l'avviso di file manomesso.

anche la soluzione di antony mi andrebbe bene:
invece disabilita solo le macro all' apertura, col Maiusc?

ma non le so applicare... :-?

x ora grazie
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi Francesco53 » 16/03/13 14:03

ciao Raimea,
se all'apertura del file hai la verifica delle celle, se una è diversa dovrebbe chiudere il file dopo il msg.
Codice: Seleziona tutto
    Private Sub Workbook_Open()
    Dim VettM(3) As String
    VettM(1) = "3su5.bwin"
    VettM(2) = "calendario"
    VettM(3) = "masaniello"
    For NF = 1 To 3
    If Sheets(VettM(NF)).Range("A1").Value <> "abc" Then ThisWorkbook.Close savechanges:=False
    Next NF
    End Sub

Questo codice postatoti da Flash, verifica all'apertura del foglio se una delle tre celle è stata cambiata,
se al posto del codice: ThisWorkbook.Close savechanges:=False, che chiude ma non salva il file,
inserisci quanto ti ho postato io, dovrebbe salvare con la variazione per cui ogni volta che cerchi di aprire
il file, verifica le tre celle e se una è differente chiude il file.
Fatti una copia del file e prova a cambiare una cella, poi salva e riapri il file, all'apertura controlla le
celle e se una è differente dovrebbe in automatico farti apparire la msg con la sola opportunità della
chiusura del file.
S.O. Vista e Office 2007
Francesco53
Utente Senior
 
Post: 647
Iscritto il: 20/02/10 18:45

Re: Proteggere codice vba

Postdi raimea » 16/03/13 14:09

ciao

si ,.sii
fa cio che descrivi
ed e' cio che cercavo, :)
avevo mal interpretato -->
e non consentirne più l'apertura


di nuovo grazie
cosi e' tutto ok :D
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi Anthony47 » 17/03/13 02:17

Raimea ha scritto:anche la soluzione di antony mi andrebbe bene:
Anthony ha scritto:invece disabilita solo le macro all' apertura, col Maiusc?


ma non le so applicare... :-?

Grazie per la fiducia, ma io volevo chiedere "Che cosa accade se invece di disabilitare le macro l' utente disabilita solo le macro di avvio del file?", perche' temo che la risposta sia "il file rimane aperto con tutte le sue prestazioni".
Per simulare quello che io dico, apri il file mantenendo pero' premuto il tasto Maiusc fino alla completa visualizzazione del contenuto.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Proteggere codice vba

Postdi raimea » 17/03/13 03:40

ciao
ho fatto il "compito" di antony.
ho cancellato il contenuto in A1 di un foglio che viene controllato all'apertura.
ho aperto tale file , rispondendo attiva macro , e tenendo premuto il tasto maiuscolo.

mi e' apparso l'avviso di file manomesso e poi mi ha chiuso il file.
questo con offc 2003.

questa la macro completa:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Dim VettM(10) As String

VettM(1) = "3su5.bwin"
VettM(2) = "calendario"
VettM(3) = "yenke"
VettM(4) = "martingala"
VettM(5) = "ormond"
VettM(6) = "fibonacci"
VettM(7) = "dalambert"
VettM(8) = "copertura"
VettM(9) = "calcola.copertura"
VettM(10) = "studio & info"

For NF = 1 To 10

If Sheets(VettM(NF)).Range("A1").Value <> "abc" _
 Or Sheets(VettM(NF)).Range("A1").Value <> "abc" Then
        p = MsgBox("hai haii haiiiii, Il file è stato manomesso!" & vbLf & _
        "per info contatta Raimea" & vbLf & _
        " info@lelugarine.eu", vbOKOnly + vbCritical)
       
        ActiveWorkbook.Close savechanges:=True
    End If


Next NF
End Sub


NB: sinceramente a me questa soluzione cosi' e' ok.
grazie
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: Proteggere codice vba

Postdi Anthony47 » 17/03/13 12:25

Se preferisci credere che la protezione funziona, ok anche per me.
Tuttavia excel e' progettato per consentire la non esecuzione delle macro "AutoOpen", quindi basta usare il tasto Maiusc per impedire l' esecuzione della macro che controlla la manomissione del file.
Per verificare che questo succede anche sul tuo Pc:
-parti con Excel caricato
-Menu /File /Apri
-scegli i file
-premi Maiusc e poi "Apri"; tieni Maiusc premuto anche mentre scegli di abilitare le macro.
In questo modo la Sub Workbook_Open non verra' eseguita, con quel che ne segue.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Proteggere codice vba

Postdi raimea » 17/03/13 12:40

ciao
lungi da me' mettere in dubbio le tue SUPER conoscenze di vba... :)
Se preferisci credere che la protezione funziona, ok anche per me.

diciamo che x i miei modesti file questo tipo di protezione e piu che sufficente
sicuramente patra' essere aggirata...

ho provato anche cosi:
-parti con Excel caricato
-Menu /File /Apri
-scegli i file
-premi Maiusc e poi "Apri"; tieni Maiusc premuto anche mentre scegli di abilitare le macro.
In questo modo la Sub Workbook_Open non verra' eseguita, con quel che ne segue.


ma sinceremente ho ottenuto lo stesso risultato,
avviso di manomissione e chiusura file.

http://dl.dropbox.com/u/96374724/luga.progressioni_2.4.rar
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Proteggere codice vba":


Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti