2012-02-28 8 views
13

यदि मेरे पास एक स्प्रेडशीट है जहां मैंने वीबीए संपादक से एमएस आउटलुक 14.0 ऑब्जेक्ट लाइब्रेरी का संदर्भ दिया है, और एक उपयोगकर्ता जिसके पास केवल एमएस आउटलुक 12.0 स्थापित है, तो जब वह उपयोगकर्ता स्प्रैडशीट खोलता है, तो उन्हें इस पंक्ति पर संकलन त्रुटि मिलती है:एमएस ऑफिस (एमएस आउटलुक) के पुराने संस्करण वाले उपयोगकर्ताओं के कारण एक्सेल वीबीए संकलन त्रुटियों को रोकना?

Range("export_date") = Date - 1 

अगर वे उपकरण, संदर्भ में जाते हैं, संदर्भ सूची में, इस त्रुटि है:

MISSING: MS Outlook 14.0 Object Library 

वे कहते हैं कि पुस्तकालय का चयन रद्द, और बदले का चयन करते हैं

MS Outlook 12.0 Object Library

... कोड फिर ठीक से संकलित करता है और स्प्रेडशीट उनके लिए ठीक काम करता है।

मुझे वास्तव में समझ में नहीं आता कि यह दिनांक() फ़ंक्शन पर क्यों विफल रहता है, क्योंकि यह वीबीए फ़ंक्शन है, न कि Outlook फ़ंक्शन। लेकिन इससे भी महत्वपूर्ण बात यह है कि इस स्थिति से बचने का कोई तरीका है? केवल एक चीज जिसे मैं सोच सकता हूं, संदर्भों को सेट नहीं करना है, और केवल ऑब्जेक्ट के प्रकारों का उपयोग करें और CreateObject ("Outlook.Aplication") के माध्यम से तत्काल टाइप करें, लेकिन मुझे मजबूत टाइपिंग आदि को नफरत है,

कैन कोई भी एमएस ऑफिस के पुराने संस्करणों के साथ पिछड़ा संगतता के इस मुद्दे को संभालने का एक बेहतर तरीका सुझाता है?

उत्तर

22

tbone, जिसे आप के रूप में संदर्भित करते हैं स्ट्रॉन्ग टाइपिंग को "प्रारंभिक बाध्यकारी" कहा जाता है।

दुर्भाग्यवश प्रारंभिक बाध्यकारी के साथ कमियों में से एक यह है कि यदि अंतिम उपयोगकर्ता के पास आपके जैसा ही संस्करण नहीं है तो आपको उन त्रुटियां मिलेंगी।

यदि आप मुझसे पूछते हैं, मैं (जहाँ आप संदर्भ बनाने नहीं करते हैं और एक उदाहरण बनाने के लिए CreateObject का उपयोग करें)

एक दिलचस्प पढ़ा लेट बाइंडिंग पसंद करते हैं।

विषय: जल्दी बाध्यकारी और स्वचालन में लेट बाइंडिंग

लिंक का उपयोग करना: http://support.microsoft.com/kb/245115

मेरे सुझाव

प्रारंभिक बाध्यकारी यदि आप इसे पसंद की वजह से हार नहीं माने IntelliSense। हालांकि इससे पहले कि आप अपना आवेदन वितरित करें, कोड को लेटबाइंडिंग में बदलें। प्रारंभिक बाध्यकारी और देर बाध्यकारी में कोड के तरीके में बहुत अंतर नहीं है।

यहाँ एक उदाहरण

अर्ली बाइंडिंग

'~~> Set reference to Excel Object Library 
Sub Sample() 
    Dim oXLApp As Excel.Application 
    Dim oXLBook As Excel.Workbook 
    Dim oXLSheet As Excel.Worksheet 

    '~~> Create a new instance of Excel 
    Set oXLApp = New Excel.Application 
    '~~> Add a new workbook 
    Set oXLBook = oXLApp.Workbooks.Add 
    Set oXLSheet = oXLBook.Worksheets(1) 

    ' 
    '~~> Rest of the code 
    ' 
End Sub 

लेट बाइंडिंग

'~~> Doesn't require a reference to Excel Object Library 
Sub Sample() 
    Dim oXLApp As Object 
    Dim oXLBook As Object 
    Dim oXLSheet As Object 

    '~~> Create a new instance of Excel 
    Set oXLApp = CreateObject("Excel.Application") 
    '~~> Add a new workbook 
    Set oXLBook = oXLApp.Workbooks.Add 
    Set oXLSheet = oXLBook.Worksheets(1) 
    ' 
    '~~> Rest of the code 
    ' 
End Sub 

HTH

सिड

है
+1

अरे, आपका जवाब वह है जो मुझे डर था कि मामला होने वाला था। "... आपके आवेदन को वितरित करने से पहले, कोड को लेटबाइंडिंग में बदलें।" - किए जाने से कहीं ज्यादा आसान कहा !!!! :) किसी व्यक्ति ने बहुत कुछ किया है, तो पुराने प्रकार की लाइब्रेरी का उपयोग करना बेहतर होगा, लेकिन मेरे मामले के लिए मैं केवल प्रारंभिक बाध्यकारी अनुमान लगाऊंगा। – tbone

+1

@ टोनोन: मेरा विश्वास करो। शुरुआती बाइंड को देर से बांधने के लिए कनवर्ट करना बहुत आसान है :) –

+2

@tbone जबकि आप \ nd रनटाइम के दौरान विभिन्न दृष्टिकोण संस्करणों के संदर्भ जोड़ने का प्रयास करते हैं, तो मैं इस पर सिड की सलाह के साथ जाऊंगा। +1 – brettdj

संबंधित मुद्दे