2012-06-25 1 views
7

J'ai un fichier de modèle .dotm sur un partage réseau. Il existe des macros avec des références aux bibliothèques d'objets Word, Office et Outlook. Nous utilisons deux plates-formes différentes, Windows XP et Windows 7, ainsi que Microsoft Office 2007 et Office 2010. Lorsque les utilisateurs ouvrent le fichier modèle, les références pour Word et Office s'ajustent automatiquement et en conséquence (ils sont définis sur Microsoft Word 12 Object Library ou Microsoft Word 14 Object Library si nécessaire), et les macros s'exécutent sans problème.La bibliothèque d'objets Outlook ne bascule pas entre les versions 12 et 14

La bibliothèque d'objets Microsoft Outlook passe correctement de la version 12 à la version 14. Elle ne bascule pas correctement de la version 14 à la version 12. Dans ce cas, l'erreur indique que la bibliothèque n'est pas trouvée. Est-ce un bug? Y at-il un travail autour? Quelque chose que je néglige?

+5

Je crois que vous utilisez 'EarlyBinding' Avez-vous envisagé d'utiliser' LateBinding (LB) '? L'avantage de LB est que vous n'avez pas besoin de vous soucier de l'exécution de versions différentes sur des ordinateurs différents. Le code sera toujours lié à la version présente sur le PC où le code est exécuté. Voir le lien: http://support.microsoft.com/kb/245115 –

+0

Merci. Je garde cette option en réserve. Plutôt, je demande pourquoi les deux autres références se mettent à jour automatiquement dans les deux sens mais pas spécifiquement dans Outlook. Si c'est la façon dont il est, je vais devoir utiliser la liaison tardive, vous – ForEachLoop

+0

J'ai rencontré le même problème, en utilisant Excel VBA. Je remarque également que les références (early bound) aux bibliothèques Microsoft Office et Microsoft Excel sont automatiquement basculées entre les versions 12 et 14, mais pas la référence à Microsoft Outlook. Autrement dit, il change auomatiquement de 12 à 14, mais jamais de retour à 12. – comecme

Répondre

3

ForEachLoop,

Il semble que votre question a largement répondu. Je vais simplement ajouter un peu d'information pour des raisons de clarté, et pour donner une réponse à cette question. Un utilisateur sur les Forums Microsoft, Ossiemac, a noté que LateBinding was the way to go, comme l'a déclaré Siddarth Rout. Comme l'indique Siddarth, cela signifie que vous n'avez pas à vous soucier des références.

Ossiemac fourni quelques exemples de code pour utiliser le LateBinding dans l'envoi d'un courrier électronique, que j'ai reformaté et placé ici:

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 a un article sur la contrast of EarlyBinding and LateBinding -

~ JOL

+1

Merci . J'ai fini par utiliser la liaison tardive. C'est un bon article! La solution est embarrassante puisque vous perdez beaucoup de fonctionnalités intéressantes de l'éditeur. En outre, si vous utilisez un compilateur (tel que Visual Studio), vous pouvez contourner ce problème, par exemple, en chargeant côte à côte Word et Excel 2007 et 2010 et en choisissant la version à compiler. Malheureusement, deux versions d'Outlook ne peuvent pas être chargées côte à côte, vous êtes donc bloqué par une liaison tardive. – ForEachLoop

+0

Fascinant! Je suis content que cela fonctionne, et le concept de passage entre différentes versions de mot pour la compilation en utilisant VS porte plus loin l'exploration à l'avenir ... Merci pour les détails sur la mise en œuvre! ~ JOL – JackOrangeLantern

+0

Merci pour cela, c'était très utile. Je devais utiliser Google pour toutes les constantes dont j'avais besoin, car j'ai affaire à des rendez-vous au lieu d'articles de courrier, mais cela m'a permis de redémarrer. Je dois faire cela à cause de différentes versions d'Outlook. –

Questions connexes