Mark si trova in un ambiente di lavoro che utilizza due versioni di Excel? 2002 e 2003. Si verifica un problema quando apre una cartella di lavoro con una macro in Excel 2003, che installa la libreria VB di Office 11, e successivamente qualcuno tenta di aprire la stessa cartella di lavoro in Excel 2002, che restituisce un errore quando la macro tenta di eseguire perché non riesce a trovare il riferimento alla libreria VBA corretto. Mark sa che può correggerlo manualmente andando nell’editor VB e cancellando il riferimento alla libreria VBA mancante, ma si chiede se esiste un modo per fare in modo che la cartella di lavoro controlli automaticamente la versione di Excel e aggiorni di conseguenza il riferimento della libreria VBA.

Un modo per risolvere questo problema è creare e salvare la cartella di lavoro utilizzando la versione precedente di Excel. Quando viene aperto nella versione successiva di Excel, il riferimento alla libreria VBA verrà aggiornato automaticamente.

Excel esegue gli aggiornamenti andando alle versioni successive, ma non andando alle versioni precedenti.

Ciò significa, tuttavia, che anche se la cartella di lavoro viene creata nella versione precedente di Excel, una volta aperta e successivamente salvata nella versione successiva di Excel, gli utenti della versione precedente avranno problemi ad aprirla.

La soluzione, secondo alcune fonti, è quella di ricorrere al cosiddetto “late binding”. Ciò significa semplicemente che la macro viene scritta in modo che cerchi funzioni specifiche solo durante l’esecuzione, non quando la macro viene salvata. Questo è un po ‘citato nel seguente articolo della Microsoft Knowledge Base:

http://support.microsoft.com/?kbid=244167

Puoi provare le tecniche di associazione tardiva aprendo l’editor VBA e rimuovendo tutti i riferimenti precedentemente stabiliti. Quindi aggiungi un codice simile al seguente vicino all’inizio della tua macro:

If Application.Version = "10.0" Then    'Excel 2002     Dim oExcel As Object    'Apply late binding     Set oExcel = CreateObject("Excel.Application")

End If If Application.Version = "11.0" Then    'Excel 2003     '     ' Add whatever references you want for Excel 2003     ' End If

Alla fine della macro assicurati di impostare tutti gli oggetti definiti (come oExcel) su Nothing. Un buon esempio di codice che è più robusto di quello che viene presentato qui può essere trovato in questi articoli:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=267 http://www.vbaexpress.com/kb/getarticle.php?kb_id=272

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3340) si applica a Microsoft Excel 97, 2000, 2002 e 2003.