Prevenire VBA di Excel errori di compilazione, dovuti agli utenti in possesso di una versione precedente di MS Office (MS Outlook) installato?

Se ho un foglio di calcolo in cui ho fatto riferimento MS Outlook 14.0 Libreria di Oggetti dell’editor di VBA, e un utente che ha solo MS Outlook 12.0 installato, quindi quando l’utente apre il foglio di calcolo, si ottiene un errore di compilazione di questa linea:

Range("export_date") = Date - 1

Se vai in Strumenti, Riferimenti, nell’elenco di riferimenti, c’è questo errore:

MISSING: MS Outlook 14.0 Object Library

Se si deseleziona questa libreria, e invece di selezionare

MS Outlook 12.0 Object Library

…quindi il codice correttamente e compila il foglio di calcolo funziona bene per loro.

Io non capisco perché non riesce la funzione Date (), che è funzione VBA, non un Outlook funzione. Ma ancora più importante, c’è un modo per evitare questa situazione? L’unica cosa che posso pensare è quello di non impostare i riferimenti, e basta usare le variabili di tipo Oggetto e creare un’istanza di via CreateObject(“Outlook.Applicazione”), ecc, ma io odio a rinunciare a tipizzazione forte, etc.

Qualcuno può suggerire un modo superiore per gestire questo problema di compatibilità con le versioni precedenti di MS Office?

InformationsquelleAutor tbone | 2012-02-28

 

One Reply
  1. 26

    tbone, che si riferiscono a come Tipizzazione Forte è chiamato “Early Binding”.

    Purtroppo uno degli inconvenienti con l’Associazione Anticipata è che se l’utente finale non ha la stessa versione come la tua, allora si otterrà gli errori.

    Se chiedete a me, io preferisco l’Associazione Tardiva (dove non creare riferimenti e utilizzare CreateObject per creare un’istanza)

    Una lettura interessante.

    Argomento: Utilizza il binding precoce e tardiva in Automazione

    Link: http://support.microsoft.com/kb/245115

    Il Mio Suggerimento

    Non rinunciare Early Binding, se ti piace a causa di intellisense. Tuttavia, prima di distribuire la tua applicazione, modificare il codice di associazione tardiva. Non c’è molto di una differenza nel modo in cui il codice in Binding Precoce e Tardiva.

    Qui è un esempio

    Associazione Anticipata

    '~~> Set reference to Excel Object Library
    Sub Sample()
        Dim oXLApp As Excel.Application
        Dim oXLBook As Excel.Workbook
        Dim oXLSheet As Excel.Worksheet
    
        '~~> Create a new instance of Excel
        Set oXLApp = New Excel.Application
        '~~> Add a new workbook
        Set oXLBook = oXLApp.Workbooks.Add
        Set oXLSheet = oXLBook.Worksheets(1)
    
        '
        '~~> Rest of the code
        '
    End Sub

    L’Associazione Tardiva

    '~~> Doesn't require a reference to Excel Object Library
    Sub Sample()
        Dim oXLApp As Object
        Dim oXLBook As Object
        Dim oXLSheet As Object
    
        '~~> Create a new instance of Excel
        Set oXLApp = CreateObject("Excel.Application")
        '~~> Add a new workbook
        Set oXLBook = oXLApp.Workbooks.Add
        Set oXLSheet = oXLBook.Worksheets(1)
        '
        '~~> Rest of the code
        '
    End Sub

    HTH

    Sid

    • Accidenti, la tua risposta è quella che ho avuto paura è stato il caso. “…prima di distribuire l’applicazione, modificare il codice di associazione tardiva.” – molto più facile a dirsi che a farsi!!!! 🙂 Usando un vecchio tipo di libreria, sarebbe preferibile se una persona ha fatto un sacco di questo, ma per il mio caso userò solo l’Early Binding, credo.
    • fidati di me. È molto facile per convertire un Inizio di Associare a un late binding 🙂
    • mentre cou\ld tenta di aggiungere i riferimenti alle diverse versioni di outlook durante il runtime, vorrei andare con Sid consigli su questo. +1
    • > “e’ molto facile per convertire un Inizio di Associare a un late binding” sono d’accordo. Non è così facile convertire 20 di loro, soprattutto se avete lo stesso problema, ma con più di diversi tipi di oggetto (Outlook, Word, ecc). O c’è una tecnica che mi manca?

Lascia un commento