Protezione fogli VBA



  • Protezione fogli VBA
    di nemo data: 23/02/2013 08:55:20

    Salve a tutti.

    Ho due cartelle per la gestione di dati di produzione.
    La prima, nominata con il nome del giorno (es. (21-02-13.xls) serve da maschera per inserimento dati da parte degli operatori di linea.
    La seconda, nominata "Archivio_Uova.xls" che sta sempre nella stessa cartella della prima, serve per raccogliere in un'unica tabella i dati inseriti nella prima.
    Una volta trasferiti i dati da 1 a 2, 1 viene archiviata in apposita cartella e sostituita con una vuota con il nome del giorno successivo per il prossimo inserimento.
    Ora sulla cartella di inserimento (1) ci sono due pulsanti per aprire e chiudere la cartella archivio (2).
    All'apertura i fogli dell'archivio vengono sprotetti e protetti alla chiusura.
    Il codice delle protezione fogli sta sul modulo "ThisWokbook", da me rinominata "Questa_cartella_di_lavoro", della cartella archivio e si attiva per l'evento "Wokbook_BeforeClose".
    Quello che non capisco è perché se chiudo la cartella archivio tramite il pulsante di rosso di chiusura tutto funziona mentre se chiudo con il pusante dell'altra cartella loperazione non da errori ma i fogli non sono protetti.
    Allego codice.

    Grazie dell'attenzione.
     
    'Questa routine sta nella cartella da chiudere e proteggere
    'Al posto di "Application.Workbooks("Archivio_Uova.xls")" prima c'era "Workbooks("Archivio_Uova.xls")" e prima ancora
    ' "Questa_cartella_di_lavoro" ma il comportamento è sempre quello.
    
    Option Explicit
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox ("Ora proteggo i fogli della cartella" & vbCrLf & ActiveWorkbook.Name)
    With Application.Workbooks("Archivio_Uova.xls")
        .Worksheets(1).Protect ("bau")
        .Worksheets(2).Protect ("bau")
        .Worksheets(3).Protect ("bau")
        .Worksheets(4).Protect ("bau")
        .Save
    End With
    
    End Sub
    
    Al pusante è collegata questa routine in un modulo della propria cartella.
    
    Sub ChiudiArchivio()
    
     Workbooks("Archivio_Uova.xls").Close
    
    End Sub
    
    
    



  • di Vecchio Frac data: 23/02/2013 14:20:25

    Sì, davvero curioso.
    Sembra che il codice di protezione in BeforeClose venga semplicemente ignorato.
    Puoi risolvere duplicando le istruzioni Protect direttamente nel codice della macro ChiudiArchivio.
     
    Sub ChiudiArchivio()
    
    With Application.Workbooks("Archivio_Uova.xls")
        .Worksheets(1).Protect ("bau")
        .Worksheets(2).Protect ("bau")
        .Worksheets(3).Protect ("bau")
        .Worksheets(4).Protect ("bau")
        .Save
    End With
     Workbooks("Archivio_Uova.xls").Close True     'per salvare senza chiedere conferma
    
    End Sub
    






  • di nemo (utente non iscritto) data: 23/02/2013 22:00:20

    Si è così.
    Infatti lo avevo già fatto ma mi sembrava stupido duplicare inutilmente il codice.

    Grazie comunque.

    Ciao.