Domanda

Ho un'applicazione ACCESS-VBA che utilizza anche Word-VBA.Durante l'esecuzione dell'applicazione sulla mia macchina locale, funziona bene.Una volta trasferito ad altri (stesse versioni di accesso e parola) si schianterà quando si tratta della porzione VBA di Word.Comandi come document.open o .Saveas2 non riuscire: Method 'SaveAs2' of object failed ad esempio.

Ho anche notato che le biblioteche che ho referenziato nell'applicazione sono richieste da qualsiasi altro utente finale.Sono abituato a compilare solo con le biblioteche e da quel punto sono sempre incluse nel .jar / .exe / ecc, ma, sembra quando si sposta l'applicazione ai computer degli altri, è sempre cercare di ricompilare?

Non sono stato esperto in VBA, quindi sto speculando che le mie funzioni Word-VBA non riuscite sono a causa di un errore di riferimento, qualsiasi altra idea?

È stato utile?

Soluzione

Le "Biblioteche" che VBA può fare riferimento sono in realtà Oggetti COM , solitamente confezionati come file DLL . Sono oggetti che sono istanziati dinamicamente a runtime (se non lo sono già) quando richiesto. Sono caricati da Windows in memoria e il programma utilizza lo standard COM per interagire con sé, chiamando metodi e ottenere o impostare le proprietà (comunicazione interprocessa). Ci sono generalmente due modi per interagire con loro: vincolante precoce e legatura tardiva.

Con il rilegatura precoce, si aggiunge un riferimento alla libreria mentre si sta ancora scrivendo il codice, che consente all'IDE VBA di fornire il completamento automatico e un controllo di errore di compilazione. Hai istanziare gli oggetti con la parola chiave "nuova" e digitando direttamente il nome dell'oggetto. Tuttavia, il rilegatura precoce richiede di selezionare una DLL specifica e possibilmente una versione specifica dell'interfaccia. Ciò può portare a problemi se si consulta una versione specifica di interfaccia quale uno dei tuoi utenti non ha.

Con il legame tardivo, istanziare gli oggetti utilizzando CreateObject o GetObject, richiedendoli per nome da Windows. Windows guarda il nome < / a> e restituire un riferimento all'oggetto. Le variabili nel tuo codice sono semplicemente oggetti e metodi di chiamata è un po 'pericoloso perché il compilatore consente di digitare qualsiasi nome del metodo desiderato e non fornisce avvisi di compilazione. Questo ha il vantaggio che purché chiamino metodi ben consolidati e nulla di nuovo o deprecato, il codice funzionerà indipendentemente dalla versione dell'utente.

Per quanto riguarda l'errore che stai ottenendo, è possibile verificare la versione di Office sulle macchine utente - saveas2 è stato aggiunto in Office 2010.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top