2012-06-25 34 views
7

Tôi có tệp mẫu .dotm trên mạng chia sẻ. Có các macro có tham chiếu đến các thư viện đối tượng Word, Office và Outlook. Chúng tôi sử dụng hai nền tảng khác nhau, Windows XP và Windows 7, cùng với Microsoft Office 2007 và Office 2010. Khi người dùng mở tệp mẫu tham chiếu cho Word và Office điều chỉnh tự động và phù hợp (nghĩa là, chúng được đặt thành Microsoft Word 12 Object Thư viện hoặc Microsoft Word 14 Thư viện đối tượng khi cần) và các macro chạy mà không có sự cố.Thư viện đối tượng Outlook không chuyển đổi giữa các phiên bản 12 và 14

Thư viện đối tượng Microsoft Outlook chuyển đổi đúng từ phiên bản 12 thành 14. Thư viện này không chuyển đổi đúng từ phiên bản 14 xuống 12. Trong trường hợp đó, nó cung cấp lỗi mà không tìm thấy thư viện. Đây có phải là một lỗi? Có cách giải quyết nào không? Tôi đang xem cái gì?

+5

Tôi tin rằng bạn đang sử dụng 'EarlyBinding' Bạn có cân nhắc sử dụng' LateBinding (LB) 'không? Lợi ích của LB là bạn không cần phải lo lắng về các phiên bản khác nhau đang được chạy trên các máy tính khác nhau. Mã sẽ luôn ràng buộc với phiên bản có trong máy tính nơi mã đang được chạy. Xem liên kết của anh ấy: http://support.microsoft.com/kb/245115 –

+0

Cảm ơn bạn. Tôi đang giữ tùy chọn đó để đặt trước. Thay vào đó, tôi hỏi lý do tại sao hai tài liệu tham khảo khác cập nhật tự động theo một trong hai hướng nhưng đặc biệt là Outlook, thì không. Nếu đó là cách của nó, tôi sẽ phải sử dụng ràng buộc muộn, ye – ForEachLoop

+0

Tôi đã gặp phải vấn đề tương tự, sử dụng Excel VBA. Tôi cũng lưu ý rằng (đầu ràng buộc) tham chiếu đến Microsoft Office và Microsoft Excel thư viện được tự động chuyển đổi giữa các phiên bản 12 và 14, nhưng tham chiếu đến Microsoft Outlook thì không. Đó là, nó tự động thay đổi 12-14, nhưng không bao giờ trở lại 12. – comecme

Trả lời

3

ForEachLoop,

Có vẻ như câu hỏi của bạn phần lớn đã được trả lời. Tôi sẽ chỉ thêm một chút thông tin vì mục đích rõ ràng, và để cung cấp câu hỏi này với một câu trả lời. Một người dùng trên Diễn đàn Microsoft, Ossiemac, lưu ý rằng LateBinding was the way to go, như đã được tuyên bố bởi Siddarth Rout. Như ngụ ý của Siddarth, điều đó có nghĩa là bạn không phải lo lắng về tài liệu tham khảo.

Ossiemac cung cấp một số mẫu mã để sử dụng LateBinding trong việc gửi một email, mà tôi đã định dạng lại và đặt ở đây:

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 có một bài báo thảo luận về contrast of EarlyBinding and LateBinding -

~ Jol

+1

Cảm ơn . Tôi đã kết thúc bằng cách sử dụng cuối ràng buộc. Đó là một bài viết tuyệt vời! Các giải pháp của vụng về kể từ khi bạn mất rất nhiều tính năng thú vị của trình soạn thảo. Ngoài ra, nếu bạn sử dụng trình biên dịch (ví dụ như Visual Studio), bạn có thể giải quyết vấn đề này, ví dụ, bằng cách tải Word và Excel 2007 và 2010 cạnh nhau và chọn phiên bản nào muốn biên dịch. Thật không may, hai phiên bản của Outlook không thể được nạp bên cạnh, vì vậy bạn đang mắc kẹt với bất kỳ ràng buộc muộn. – ForEachLoop

+0

Hấp dẫn! Tôi rất vui vì nó đã hoạt động, và khái niệm truyền tải giữa các phiên bản khác nhau của từ để biên soạn bằng cách sử dụng VS gấu thăm dò thêm trong tương lai ... Cảm ơn các chi tiết về việc thực hiện! ~ JOL – JackOrangeLantern

+0

Cảm ơn vì điều này, điều này rất hữu ích. Tôi đã phải Google cho tất cả các hằng số tôi cần, vì tôi đang làm việc với các cuộc hẹn theo lịch thay vì các mục thư, nhưng điều này đã giúp tôi hoạt động trở lại. Tôi phải làm điều này vì các phiên bản khác nhau của Outlook. –

Các vấn đề liên quan