Come utilizzare DAO da Script VBA EXCEL quando MS Access non è installato o presente

Using DAO from Excel VBA VBS Without MS Access installed

Nonostante sia stato ufficialmente abolito già da diversi anni, l'interfaccia nota come Microsoft Jet Data Access Objects e meglio conosciuta come DAO è ad oggi tutt'altro che scomparsa, "nascondendosi" ancora di frequente in molti script VBA/VBS all'interno di file Excel, software scritto in VB6/VB2008, script di sistema e via dicendo. La presenza di DAO nel nostro sistema - o meglio, di applicativi che necessitano di una connessione basata su DAO - è particolarmente evidente se utilizziamo una versione di Windows successiva a Windows Vista, come ad esempio Windows 8 o Windows 10, poiché provoca inevitabilmente la comparsa di errori come questo:

DAO.DLL non trovato.
DAO.DLL not found.
Il file DAO.DLL è mancante.
The file DAO.DLL is missing.

O questo:

Quest'applicazione non è riuscita ad avviarsi perché dao360.dll non è stato trovato.
This application failed to start because DAO.DLL was not found. Re-installing the application may fix this problem.

O anche questo:

il provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale.
'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

Nelle versioni di Windows pre-Vista, dove le librerie DAO venivano fornite insieme al sistema, questo tipo di errori erano molto più rari e, nella maggior parte dei casi, dipendevano dalla de-registrazione delle librerie suddette a seguito della disinstallazione totale o parziale di alcuni software. Nella maggior parte dei casi, per risolvere questi errori era sufficiente ripristinare la registrazione del componente utilizzando il comando di sistema REGSVR32 nel modo seguente:

Nelle versioni più recenti di Windows, dove DAO non è più presente, è comunque possibile risolvere il problema installando qualsiasi versione di MS Access. Il problema è che, ovviamente, non tutti possono permettersi una licenza Access, nel qual caso Microsoft ha - fortunatamente - pensato ad una alternativa gratuita: è sufficiente installare il Microsoft Access Database Engine 2010 Redistributable dal sito MSDN, avendo ovviamente cura di selezionare la versione corretta per la propria regione e per l'architettura del proprio sistema: le versioni a 32-bit e a 64-bit non possono infatti coesistere sulla stessa macchina.

Installare questo componente consente nella maggior parte dei casi di risolvere il problema di cui sopra, legato alla mancanza di DAO. Purtroppo esiste la concreta possibilità di imbattersi in un nuovo errore, questa volta legato alla impossibilità da parte di un componente ActiveX non meglio identificato di creare un oggetto necessario:

Errore di runtime 429: il componente ActiveX non può creare l'oggetto
Runtime Error 429 - ActiveX Component Can't Create Object

Questo tipo di errore si verifica solitamente quando si tenta di eseguire uno script VBA (ad esempio all'interno di un file Excel) che internamente tenta di effettuare una connessione ad un database Access o SQL Server tramite DAO/ODBC.

Per risolvere questo secondo errore dovete prima di tutto verificare se il vostro Office è stato installato in versione a 32-bit o a 64-bit. Il problema è infatti legato a una strana (e ahimé quasi irrisolvibile) incompatibilità che si verifica tra le applicazioni Office a 64-bit e le connessioni ODBC tramite DAO: sfortunatamente, l'incompatibilità sussiste anche quando tutto il software summenzionato è installato a 64-bit. Per risolvere, l'unica soluzione che ho trovato finora è quella di disinstallare tutte le componenti a 64-bit di MS Office, Access e/o Access Redistributable eventualmente presenti sul sistema e reinstallare la loro versione a 32-bit.

Nel caso in cui non vogliate ricorrere a un rimedio così drastico, esiste una alternativa leggermente meno traumatica: creare una macchina virtuale a 32-bit (con XP, Vista, Win 8 o Win10), installare lì il software suddetto e utilizzarla per eseguire gli script VBA/VBS e/o i file Excel che contengono le istruzioni che provocano il problema. Questa seconda soluzione è quella che ho adottato nel mio ufficio per consentire ai miei colleghi di accedere a un file Excel piuttosto antico contenente alcune connessioni a database esterni effettuate tramite DAO/ODBC: si tratta di un workaround macchinoso, ma se non altro efficace.

Per il momento è tutto: felice (dis)installazione!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.