Bloccare macro automatiche



  • Bloccare macro automatiche
    di Luca (utente non iscritto) data: 08/12/2013 13:14:46

    Ciao a tutti. È la seconda volta che scrivo sul forum e spero di arrivare anche ora a una soluzione.
    Semplificando ho un file excel che una volta selezionati dei componenti mi mostra i prezzi. I prezzi vengono presi da un secondo foglio nella stessa cartella di lavoro. Per impedire la modifica, ogni foglio e l'intera cartella sono protetti, inoltre il foglio con i prezzi è nascosto in modalità veryhidden. Ogni macro deve quindi prima rimuovere e poi ripristinare la protezione. Per consentirmi di eseguire delle modifiche ho 2 macro una che toglie la protezione e mostra i fogli nascosti e l'altra che nasconde i fogli e mette la protezione. Vengono però eseguite delle operazioni legate all'evento BeforeSave e anche qui prima toglie e poi ripristina la protezione. In pratica mentre vengono fatte delle modifiche ogni volta che si salva i fogli vengono protetti rendendo l'operazione fastidiosa.
    Vorrei quindi sapere se è possibile impedire l'esecuzione della macro legata all'evento BeforeSave quando si eseguono delle modifiche. L'obiettivo finale è di collegare tutto a dei pulsanti utilizzabili anche da chi non sa nulla di vba.
    Grazie



  • di scossa data: 08/12/2013 13:47:20

    Non mi è chiaro il contesto della tua richiesta, ma:
    "Ogni macro deve quindi prima rimuovere e poi ripristinare la protezione. "

    non è necessariamente vero.

    Se in apertura (e chiusura) del file proteggi i figli con l'attributo userinterfaceonly puoi evitare di togliere e rimettere la protezione in ogni macro.
    Ovviamente tutto il codice nel file dovrebbe essere scritto in modo "corretto" .....
     
    Private Sub Workbook_Open()
      Foglio1.Protect "pippo", userinterfaceonly:=True
    End Sub
    



  • di Luca (utente non iscritto) data: 08/12/2013 15:40:03

    Non conoscevo l'istruzione "userinterfaceonly:=True". Così posso alleggerire di molto il mio codice oltre a risolvere il problema.
    Fortunatamente ho usato delle macro pubbliche quindi mi basta togliere l'istruzione che le richiama.
    Grazie mille.