giovedì 16 ottobre 2014

VBA-Office: Aprire un file di Excel da VBA disabilitando le Macro

Capita a volte di dover aprire un file Excel da codice e che questo abbia al suo interno delle macro che possono interferire con il corretto funzionamento del nostro programma. I suggerimenti che ho trovato on-line su questo argomento non sono realmente efficaci in quanto tendono a disabilitare gli eventi dell'applicazione Excel e questo può interferire con il nostro stesso programma VBA. Per esempio se il mio codice VBA sta girando su una applicazione Excel e deve aprire un'altro file Excel e mettiamo in atto la disabilitazione degli eventi, questo impatterà anche sul file contenente il mio codice. Oppure: se debbo aprire due files di cui uno con le macro abilitate e l'altro no la soluzione di disabilitare gli eventi non è valida.
Per fortuna Microsoft ci da una soluzione che salva capra e cavoli. E' sufficiente alzare il livello di protezione macro di Excel a "Disattiva tutte le macro senza notifica" prima di aprire il file in questione e poi ripristinare il livello di protezione a quello che era impostato in precedenza. La proprietà da impostare è l'AutomationSecurity che restituisce dei valori elencati nel tipo MsoAutomationSecurity

Ecco un esempio:

    Dim Exc As Excel.Application
    Dim Wb As Excel.Workbook
    Dim secAutomation As MsoAutomationSecurity
    
    'Istanzio l'applicazione Excel e rilevo il livello di sicurezza corrente
    Set Exc = New Excel.Application
    secAutomation = Exc.AutomationSecurity
    'Imposto il livello di sicurezza a "Disattiva tutte le macro senza notifica"
    Exc.AutomationSecurity = msoAutomationSecurityForceDisable
    'Apro il file Excel con le macro disabilitate
    Set Wb = Exc.Workbooks.Open(FileName:="NomeFile.xlsm")
    'Reimposto il livello di sicurezza precedente

    Exc.AutomationSecurity = secAutomation


Alla prossima! :)

Nessun commento:

Posta un commento