Evento prima di salvare



  • Evento prima di salvare
    di alexps81 data: 17/07/2014 10:01:24

    Buongiorno a tutti,
    mi chiamo Alessandro e sono un nuovo iscritto.
    Dopo aver effettuato un corso avanzato sul pacchetto office 2010, mi sta interessando il codice VBA per excel.
    Sono ancora agli inizi, dunque perdonate la mia ignoranza.
    Il problema che sto affrontando è legato all'evento BeforeSave.
    In pratica nel mio ufficio ho una file excel che di default è sempre aperto e viene gestito anche da altri colleghi.
    Per evitare che tali colleghi manomettono questo file (in pratica lo devono solo consultare, non devono fare modifiche) vorrei che il file, al momento del salvataggio mi chieda una password preimpostata da me.
    Il funzionamento deve essere pressappoco così:

    Se si inserisce la password corretta, al click su ok "ACCESSO CONSENTITO" e poi si apre la schermata per il salvataggio del file;

    Se si inserisce una password sbagliata o si omette l'inserimento, al click si ok "ACCESSO NEGATO" e poi si ripropone l' inputbox dell'inserimento della password;

    Se si clicca sul tasto annulla della inputbox allora deve semplicemente ritornare alla cartella di lavoro e quindi esisterà soltanto la possibilità di uscire senza salvare nulla.

    Sotto allego un codice che ho provato a inserire, devo dire che funziona abbastanza bene, l'unico problema è che se clicco annulla si ripropone l'inputbox e finché non si inserisce la password corretta continua con l'inputbox

    Ho provato anche ad inserire "Exit Sub" ma in realtà uscendo dalla Sub non fa altro che terminare l'evento BeforeSave.

    Ho provato anche a raggirare il problema proteggendo le celle del foglio di lavoro che mi interessano, ma non va bene perché questo file contiene altre macro che servono da filtro per queste celle e dunque se si bloccano non funziona più il filtro.
    Grazie.
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    Dim password As String
    Do
    password = InputBox(prompt:="Inserisci password di accesso per proseguire: ", Title:="Controllo accessi")
    If password = "alex" Then
    MsgBox "Password esatta : Accesso consentito", vbInformation + vbYes, "Verifica Password"
    Else
    If password <> "alex" Then
    MsgBox "Password errata : Accesso negato", vbInformation + vbYes, "Verifica Password"
    End If
    End If
    Loop Until password = "alex"
    
    End Sub



  • di Lucas87 data: 17/07/2014 10:40:00

    Ciao
    Il brutto dell'inputbox è che non permette di gestire le operazioni come l'utente vorrebbe. Non si riesce a gestire l'utilizzo dei pulsanti OK o Annulla. L'unica soluzione è creare un Form dedicato. Non dovrebbe essere possibile chiudere il form che dovrebbe avere una casella di testo e 2 pulsanti. In questa maniera si può gestire qualsiasi cosa.


  • Evento prima di salvare
    di alexps81 data: 17/07/2014 11:06:10

    Grazie per la risposta Lucas87.

    Beh purtroppo come ho già accennato sono proprio acerbo del codice VBA.
    Per caso tu mi potresti aiutare risolvendo il problema scrivendo un codice che fa al caso mio?
    Grazie.



  • di Lucas87 data: 17/07/2014 12:23:53

    Ciao
    Prova il file allegato

    Salva con password - Lucas87

    La password è

    psw


  • Evento prima di salvare
    di alexps81 data: 17/07/2014 12:36:41

    Grazie Lucas87,
    la tua UserForm funziona perfettamente.
    Adesso la modifico per adattarla al mio file.
    Ho imparato anche che esistono le UserForm, prima di adesso ne ero completamente all'oscuro.
    Pian Piano imparerò a gestirle.

    Se posso approfitto ancora delle tue capacità:

    E' possibile fare in modo che il file che gestisco, ogni qual volta che si salva, gli venga attribuito un nome specifico più a fianco la data di salvataggio. Ovviamente deve essere sovrascritto all'altro file, non deve crearne un'altra copia con un nome diverso.

    Grazie per la tua pazienza.


  • Evento prima di salvare
    di alexps81 data: 17/07/2014 12:46:30

    Ciao Lucas87,
    perdonami ma purtroppo mi sono accorto che non funziona correttamente.
    Nel senso che se premo ANNULLA lo salva comunque!!!



  • di Lucas87 data: 17/07/2014 12:49:40

    Non è possibile...lo puoi vedere cercando di cambiare il nome al file mentre è aperto...compare un messaggio di errore.
    Quello che puoi fare è, sempre per l'evento BeforeSave, far scrivere da qualche parte nel file la data.
    La data dell'ultimo salvataggio comunque corrisponde alla data di ultima modifica indicata da windows.


  • Evento prima di salvare
    di alexps81 data: 17/07/2014 12:51:36

    Si si scusami, ho fatto una cavolata. Ho modificato una cosa e non l'ho riportate in altre parti.
    Come non detto Funziona Perfettamente.

    S E I U N G E N I O !!!