2012-06-25 11 views
7

Ho un file modello .dotm su una condivisione di rete. Esistono macro con riferimenti alle librerie di oggetti Word, Office e Outlook. Utilizziamo due piattaforme diverse, Windows XP e Windows 7, insieme a Microsoft Office 2007 e Office 2010. Quando gli utenti aprono il file modello, i riferimenti per Word e Office vengono regolati automaticamente e di conseguenza (ovvero sono impostati su Microsoft Word 12 Object Libreria o Libreria oggetti di Microsoft Word 14 secondo necessità) e le macro funzionano senza problemi.La libreria di oggetti di Outlook non passa tra le versioni 12 e 14

Microsoft Outlook Object Library passa correttamente dalla versione 12 alla 14. Non passa correttamente dalla versione 14 alla 12. In tal caso, dà l'errore che la libreria non viene trovata. è un insetto? C'è una soluzione? Qualcosa che sto trascurando?

+5

Credo che stiate usando 'EarlyBinding' Avete considerato l'uso di' LateBinding (LB) '? Il vantaggio di LB è che non devi preoccuparti di versioni diverse eseguite su computer diversi. Il codice si legherà sempre con la versione presente nel pc in cui viene eseguito il codice. Vedi il suo link: http://support.microsoft.com/kb/245115 –

+0

Grazie. Sto mantenendo quell'opzione in riserva. Piuttosto, sto chiedendo perché gli altri due riferimenti si aggiornano automaticamente in entrambe le direzioni, ma quello Outlook in particolare, non lo fa. Se è così, dovrò usare l'associazione tardiva, voi – ForEachLoop

+0

mi sono imbattuto nello stesso problema, usando Excel VBA. Nota inoltre che i riferimenti (anticipati) alle librerie Microsoft Office e Microsoft Excel vengono automaticamente commutati tra le versioni 12 e 14, ma il riferimento a Microsoft Outlook no. Ovvero, cambia automaticamente da 12 a 14, ma non torna mai a 12. – comecme

risposta

3

ForEachLoop,

Sembra che la tua domanda è in gran parte stato risposto. Aggiungerò semplicemente un po 'di informazioni per chiarezza e fornirò una risposta a questa domanda. Un utente del forum Microsoft, Ossiemac, ha notato che LateBinding was the way to go, come è stato affermato da Siddarth Rout. Come sottinteso da Siddarth, ciò significa che non devi preoccuparti dei riferimenti.

Ossiemac fornito alcuni esempi di codice per l'utilizzo del LateBinding in l'invio di una e-mail, che ho riformattato e messo qui:

Private Sub btnLateBindMethod_Click() 
    ' Variables used for LateBinding 
    Dim objOutlook As Object 'Outlook.Application 
    Dim objEmail As Object  'Outlook.MailItem  
    Dim objNameSpace As Object 'Outlook.NameSpace  
    Const OutLookMailItem As Long = 0 'For Late Binding 
    Const OutLookFolderInbox As Long = 6 'For Late Binding 
    Const OutLookFormatHTML As Long = 2 'For Late Binding 
    Dim strSubject As String 
    Dim strAddress As String 


On Error Resume Next 
Set objOutlook = GetObject(, "Outlook.Application") 
On Error GoTo 0  

    If objOutlook Is Nothing Then 
     Set objOutlook = CreateObject("Outlook.Application") 
     Set objNameSpace = objOutlook.GetNamespace("MAPI") 
     objNameSpace.GetDefaultFolder(OutLookFolderInbox).Display 
    End If 

Set objEmail = objOutlook.CreateItem(OutLookMailItem) 

strSubject = "Hello World" 

    With objEmail 

     '.To = strToAddress 'Commented to prevent accidental send 

     .Subject = strSubject 

     .BodyFormat = OutLookFormatHTML 

     .Display 

     'Full Name of window can change depending on Tools -> Options -> Mail Format 
     'Changing this option for outgoing mail changes the window name. 
     'However, AppActivate appears not to require entire name but needs up to end 
     'of - Message which is included in heading following the Subject string 
     'irrespective of the Mail Format option chosen. 
     AppActivate (strSubject & " - Message") 

    End With  
End Sub 

Jimmy Pena ha un articolo che discute la contrast of EarlyBinding and LateBinding -

~ JOL

+1

. Ho finito per utilizzare l'associazione tardiva. È un grande articolo! La soluzione è scomoda poiché si perdono molte delle fantastiche funzionalità dell'editor. Inoltre, se si utilizza un compilatore (come Visual Studio) si può risolvere questo, ad esempio, avendo Word ed Excel 2007 e 2010 lato caricato a fianco e scegliere quale versione volete compilare a. Sfortunatamente, due versioni di Outlook non possono essere caricate fianco a fianco, quindi in ogni caso sei bloccato con l'associazione tardiva. – ForEachLoop

+0

Affascinante! Sono contento che ha funzionato, e il concetto di passare tra le diverse versioni di Word per la compilazione utilizzando VS orsi ulteriori esplorazioni in futuro ... Grazie per i dettagli sull'attuazione! ~ JOL – JackOrangeLantern

+0

Grazie per questo, questo è stato molto utile. Ho dovuto a Google per tutte le costanti di cui avevo bisogno, come ho a che fare con gli appuntamenti del calendario, invece di elementi di posta, ma questo mi sono alzato e correre. Devo farlo a causa delle diverse versioni di Outlook. –