Visualizzazione post con etichetta Excel 2010. Mostra tutti i post
Visualizzazione post con etichetta Excel 2010. Mostra tutti i post

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! :)

lunedì 16 giugno 2014

VBA-Excel: La finestra del MsgBox appare nascosta "sotto" la finestra di Excel

Di recente mi è capitato molte volte che la finestra aperta con il comando MsgBox in VBA apparisse "sotto" la finestra di Excel, causando così una sorta di blocco perché l'utente non vedeva il messaggio e l'applicazione restava ferma in attesa di risposta. Unico indizio che c'era un messaggio in attesa era la finestra di Excel "sfarfallante". Per l'utente era sufficiente cliccare il titolo della finestra o premere Alt-Tab per vedere il messaggio e quindi poter rispondere e proseguire, ma certo non è bello.
Ho fatto un po' di ricerche e o trovato una soluzione semplice e che pare efficace. Prima della riga in cui viene eseguito il MsgBox inserite una riga con AppActivate Application.Caption

Esempio:
AppActivate Application.Caption
MsgBox "Mio messaggio"

Spero di essere stato utile :-)