2012-06-25 14 views
7

Ich habe eine .dotm-Vorlagendatei auf einer Netzwerkfreigabe. Es gibt Makros mit Verweisen auf die Objektbibliotheken Word, Office und Outlook. Wir verwenden zwei verschiedene Plattformen, Windows XP und Windows 7, zusammen mit Microsoft Office 2007 und Office 2010. Wenn Benutzer die Vorlagendatei öffnen, werden die Verweise für Word und Office automatisch und entsprechend angepasst (dh sie sind auf Microsoft Word 12 Object eingestellt) Bibliothek oder Microsoft Word 14 Objektbibliothek nach Bedarf), und die Makros laufen ohne Probleme.Outlook-Objektbibliothek wechselt nicht zwischen Version 12 und 14

Microsoft Outlook-Objektbibliothek wechselt ordnungsgemäß von Version 12 zu 14. Es wechselt nicht ordnungsgemäß von Version 14 zu 12. In diesem Fall gibt es den Fehler, dass die Bibliothek nicht gefunden wird. Ist das ein Fehler? Gibt es eine Problemumgehung? Etwas, das ich übersehe?

+5

Ich glaube, Sie verwenden 'EarlyBinding' Haben Sie in Betracht gezogen,' LateBinding (LB) 'zu verwenden? Der Vorteil von LB besteht darin, dass Sie sich keine Gedanken darüber machen müssen, dass verschiedene Versionen auf verschiedenen Computern ausgeführt werden. Der Code wird immer mit der Version binden, die auf dem PC vorhanden ist, auf dem der Code ausgeführt wird. Siehe seinen Link: http://support.microsoft.com/kb/245115 –

+0

Danke. Ich halte diese Option in Reserve. Ich frage vielmehr, warum die anderen beiden Referenzen automatisch in beide Richtungen aktualisiert werden, aber Outlook nicht. Wenn das so ist, muss ich die späte Bindung verwenden, ye – ForEachLoop

+0

Ich stieß auf das gleiche Problem, mit Excel VBA. Ich bemerke auch, dass (frühe gebundene) Verweise auf Microsoft Office- und Microsoft Excel-Bibliotheken automatisch zwischen den Versionen 12 und 14 umgeschaltet werden, der Verweis auf Microsoft Outlook jedoch nicht. Das heißt, es ändert sich automatisch von 12 auf 14, aber nie wieder auf 12. – comecme

Antwort

3

ForEachLoop,

Es scheint, dass Ihre Frage weitgehend beantwortet. Ich werde lediglich der Klarheit halber ein paar Informationen hinzufügen und dieser Frage eine Antwort geben. Ein Benutzer in den Microsoft-Foren, Ossiemac, notierte, dass LateBinding was the way to go, wie von Siddarth Rout angegeben wurde. Wie von Siddarth angedeutet, bedeutet das, dass Sie sich nicht um Referenzen kümmern müssen.

Ossiemac lieferte einigen Beispielcode das Latebinding in dem Senden einer E-Mail für die Verwendung, die ich neu formatiert haben und hier gestellt:

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 hat einen Artikel zum Thema des contrast of EarlyBinding and LateBinding -

~ JOL

+1

Danke . Ich habe am Ende die späte Bindung verwendet. Es ist ein toller Artikel! Die Lösung ist unangenehm, da Sie viele der coolen Funktionen des Editors verlieren. Wenn Sie einen Compiler (z. B. Visual Studio) verwenden, können Sie dies umgehen, indem Sie beispielsweise Word und Excel 2007 und 2010 nebeneinander laden und auswählen, welche Version kompiliert werden soll. Leider können zwei Versionen von Outlook nicht nebeneinander geladen werden, so dass Sie sowieso mit der späten Bindung stecken bleiben. – ForEachLoop

+0

Faszinierend! Ich bin froh, dass es funktioniert hat, und das Konzept, zwischen verschiedenen Versionen von Wörtern zur Kompilierung durch Verwendung von VS zu wechseln, wird in Zukunft weiter erforscht werden ... Danke für die Details zur Implementierung! ~ JOL – JackOrangeLantern

+0

Danke dafür, das war sehr hilfreich. Ich musste Google für alle Konstanten, die ich brauchte, Google, da ich Kalendertermine anstelle von Postsendungen behandle, aber das brachte mich wieder zum Laufen. Ich muss dies aufgrund verschiedener Versionen von Outlook tun. –