2012-06-25 14 views
7

Tengo un archivo de plantilla .dotm en un recurso compartido de red. Hay macros con referencias a las bibliotecas de objetos de Word, Office y Outlook. Utilizamos dos plataformas diferentes, Windows XP y Windows 7, junto con Microsoft Office 2007 y Office 2010. Cuando los usuarios abren el archivo de plantilla, las referencias para Word y Office se ajustan automáticamente y en consecuencia (es decir, están configuradas para el objeto Microsoft Word 12 Biblioteca de objetos de Microsoft Word 14 según sea necesario) y las macros se ejecutan sin problemas.Biblioteca de objetos de Outlook no cambia entre las versiones 12 y 14

Microsoft Outlook Object Library cambia correctamente de la versión 12 a la 14. No cambia correctamente de la versión 14 a la 12. En ese caso, da el error de que la biblioteca no se encuentra. ¿Es esto un error? ¿Hay alguna solución? Algo que estoy pasando por alto?

+5

Creo que está utilizando 'EarlyBinding' ¿Ha considerado usar' LateBinding (LB) '? El beneficio de LB es que no necesita preocuparse por las diferentes versiones que se ejecutan en diferentes computadoras. El código siempre se vinculará con la versión que está presente en la pc donde se está ejecutando el código. Vea su enlace: http://support.microsoft.com/kb/245115 –

+0

Gracias. Estoy manteniendo esa opción en reserva. Más bien, estoy preguntando por qué las otras dos referencias se actualizan automáticamente en cualquier dirección, pero específicamente en Outlook, no. Si es así, tendré que utilizar el enlace tardío, ye – ForEachLoop

+0

Me encontré con el mismo problema, usando Excel VBA. También observo que las referencias (enlazadas desde el principio) a las bibliotecas de Microsoft Office y Microsoft Excel se cambian automáticamente entre las versiones 12 y 14, pero la referencia a Microsoft Outlook no. Es decir, cambia automáticamente de 12 a 14, pero nunca vuelve a 12. – comecme

Respuesta

3

bucles Foreach,

Parece ser que en gran medida su pregunta ha sido contestada. Me limitaré a agregar un poco de información en aras de la claridad, y dar una respuesta a esta pregunta. Un usuario de los foros de Microsoft, Ossiemac, señaló que LateBinding was the way to go, como ha declarado Siddarth Rout. Como lo sugiere Siddarth, eso significa que no tiene que preocuparse por las referencias.

Ossiemac proporciona un código de ejemplo para el uso de la LateBinding en el envío de un correo electrónico, que he formateado y colocado aquí:

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 Peña tiene un artículo sobre la contrast of EarlyBinding and LateBinding -

~ JOL

+1

Gracias . Terminé usando el enlace tardío. Es un gran artículo! La solución es incómoda ya que pierde muchas de las excelentes características del editor. Además, si usa un compilador (como Visual Studio), puede solucionar esto, por ejemplo, al cargar Word y Excel 2007 y 2010 uno al lado del otro y elegir a qué versión desea compilar. Desafortunadamente, dos versiones de Outlook no se pueden cargar una al lado de la otra, por lo que está bloqueado de todos modos. – ForEachLoop

+0

¡Fascinante! Me alegro de que funcionó, y el concepto de pasar entre las diferentes versiones de la palabra para compilación mediante VS implica una mayor exploración en el futuro ... ¡Gracias por los detalles sobre la implementación! ~ JOL – JackOrangeLantern

+0

Gracias por esto, esto fue muy útil. Tuve que buscar todas las constantes que necesitaba, ya que estoy tratando con citas de calendario en lugar de artículos de correo, pero esto me puso nuevamente en funcionamiento. Tengo que hacer esto debido a las diferentes versiones de Outlook. –

Cuestiones relacionadas