7 votes

La bibliothèque d'objets d'Outlook ne passe pas entre les versions 12 et 14

J'ai un fichier modèle .dotm sur un réseau partagé. Il contient des macros avec des références aux bibliothèques d'objets de Word, Office et Outlook. Nous utilisons deux plateformes 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 (c'est-à-dire qu'elles sont réglées sur Microsoft Word 12 Object Library ou Microsoft Word 14 Object Library, selon les besoins), et les macros s'exécutent sans problème.

La bibliothèque d'objets Microsoft Outlook passe correctement de la version 12 à la version 14. Elle ne passe pas correctement de la version 14 à la version 12. Dans ce cas, il donne l'erreur que la bibliothèque n'est pas trouvée. S'agit-il d'un bogue ? Existe-t-il une solution de contournement ? Quelque chose que je néglige ?

3voto

DotNetDeveloper Points 1353

ForEachLoop,

Il semble que votre question ait trouvé une réponse en grande partie. Je vais simplement ajouter quelques informations par souci de clarté et pour apporter une réponse à cette question. Un utilisateur des Forums Microsoft, Ossiemac, a noté que LateBinding était la solution comme l'a déclaré Siddarth Rout. Comme le sous-entend Siddarth, cela signifie que vous n'avez pas à vous soucier des références.

Ossiemac a fourni un exemple de code pour utiliser le LateBinding dans l'envoi d'un email, 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 publié un article sur le contraste entre EarlyBinding et LateBinding -

~JOL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X