2009-01-06 13 views
6

मैं वीबीए के लिए नया हूं और कार्यालय के लिए एक छोटा मैक्रो एप्लिकेशन फेंक रहा हूं। हमारे पास अनिवार्य रूप से समान पीसी सेटअप पर लगभग 80 उपयोगकर्ता हैं, और इसे कुछ उपयोगकर्ताओं द्वारा उपयोग किया जाएगा।वीबीए संदर्भ पुस्तकालय

मैं वेब सेवा संदर्भों का उपयोग करके वेब पृष्ठों तक पहुंचने के कुछ स्वचालन के साथ खेल रहा हूं, और मैंने परियोजना में माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम संदर्भ भी लोड किए हैं। मैंने इसे एक परीक्षण पीसी पर चलाने का प्रयास किया और शिकायत की कि संदर्भ गायब थे।

मैं विशेष रूप से लगभग 80 पीसी नहीं जाना चाहता हूं और मैन्युअल रूप से संदर्भ लोड करना चाहता हूं।

मेरा प्रश्न, मूल रूप से, यह है कि मैं 80 मैड उपयोगकर्ताओं को इस मैक्रो-ऐप के वितरण को कैसे प्रबंधित करना चाहिए ताकि यह सुनिश्चित किया जा सके कि प्रत्येक उपयोगकर्ता के लिए संदर्भ हर बार लोड हो जाएंगे।

धन्यवाद!

+0

अपने संदर्भ निर्भर रह सकते हैं के अलावा अन्य सॉफ्टवेयर से जुड़े होते हैं, तो विभिन्न संस्करणों में मौजूद है (उदाहरण के लिए एक्सेल 2003 या एक्सेल 2007), इंस्टॉलर समाधान अपेक्षित परिणाम नहीं देगा। –

उत्तर

2

दस्तावेजों को कार्यक्षमता का पर्दाफाश करने के बजाय, इसे कार्यालय (सूट, या व्यक्तिगत ऐप्स, अपनी पसंद) के लिए एक ऐड-इन बनाएं। इस तरह, आपको संदर्भों से निपटने की ज़रूरत नहीं है।

फिर, केवल ऐड-इन के साथ एक इंस्टॉल पैकेज वितरित करें जो घटकों को पंजीकृत करता है और उपयुक्त Office ऐप्स के साथ ऐड-इन्स पंजीकृत करता है।

वीबी 6 यहां एक अच्छा विचार हो सकता है, यह वीबीए के समान है।

4

यदि आपके पास संदर्भ है कि आपका एप्लिकेशन इस पर निर्भर करता है कि आप जानते हैं कि लक्ष्य पीसी पर नहीं हैं, तो मैं दृढ़ता से आपको कुछ इंस्टॉलर तकनीक की जांच करने की सलाह दूंगा।

इंस्टॉलर का उपयोग करके आप अपने मैक्रो को स्थापित करने में सक्षम होना चाहिए, और सभी उचित संदर्भ/पुस्तकालयों को स्थापित और पंजीकृत कर सकते हैं।

आमतौर पर विंडोज़, विंडोज इंस्टालर आधारित तकनीक और स्क्रिप्ट आधारित तकनीक पर दो स्वाद होते हैं।

हम अपने सभी परिनियोजन के लिए InstallShield का उपयोग करते हैं, हालांकि आपके उपयोग के लिए कई विकल्प हैं (स्टैक ओवरफ़्लो पर कई चर्चाएं हैं)।

विंडोज इंस्टालर तकनीक का उपयोग करके, आप एमएसआई इंस्टॉल फाइलें बना सकते हैं, जिन्हें आप समूह नीति का उपयोग करके स्वचालित रूप से तैनात करने में सक्षम हैं।

+0

इंस्टॉलर तकनीक 'बाहरी सॉफ़्टवेयर' संदर्भों जैसे Office, Excel या Outlook ऑब्जेक्ट लाइब्रेरीज़ के संदर्भों को प्रबंधित करने की अनुमति नहीं देगी। तब एक और मुद्दा तब होगा जब विभिन्न मशीन Excel के विभिन्न संस्करणों का उपयोग करेगी ... मैंने अपने उत्तरों में इस विशिष्ट मुद्दों पर कुछ शब्द जोड़े। –

2

this answer के अलावा, जो इस तरह के मुद्दे को हल करने के लिए बुलेट प्रूफ समाधान है, लेकिन जो कार्यान्वित करने के लिए काफी जटिल है, आप अपना वीबीए एप्लिकेशन शुरू होने पर निष्पादित होने के लिए कुछ कोड भी लिख सकते हैं, 'संदर्भों की जांच कर सकते हैं 'एप्लिकेशन' ऑब्जेक्ट का संग्रह। फिर आप अनुरोध कर सकते हैं (1) अगर अनुरोध की गई फाइलें (डीएलएल, ओसीएक्स, टीएलबी) कंप्यूटर पर उपलब्ध हैं और (2) यदि संदर्भ बनाया जा सकता है (application.references.addFromFile ...)।

सावधान: वस्तु घोषणाओं, जैसे कि 'संदर्भ निर्भर' हो सकता है:

Dim cat as ADOX.catalog 

अगर संदर्भ सक्रिय जब इसी मॉड्यूल 'संकलित' नहीं है एक संकलन बग को बढ़ा देंगे। मैं फिर आपको स्टार्टअप मॉड्यूल ('autoexec' के समतुल्य) में अपनी 'संदर्भ जांच प्रक्रिया' को अलग करने की सलाह देता हूं जो केवल वीबीए और मूल अनुप्रयोग वस्तुओं से संबंधित है। इसे अपनी सहायता फ़ाइलों से जांचें (उदाहरण: एक्सेस में, डिफ़ॉल्ट संदर्भ जिन्हें बाहरी संदर्भों के बिना उपयोग किया जा सकता है वे हैं वीबीए, एक्सेस और डीएओ)।

संपादित करें:

मामले में बाहरी संदर्भ अन्य सॉफ्टवेयर पैकेज और (1) एक MSI फ़ाइल या के साथ वितरित नहीं किया जा सकता पर निर्भर करते हैं (2) एक से अधिक संस्करण हो सकता है, मुझे लगता है कि 'references.addFromFile' ही है समाधान जो लागू कर सकते हैं। उदाहरण:

  • आपको लगता है कि पद (msword.olb फ़ाइल) का उल्लेख करने की जरूरत है एक VBA/पहुँच क्रम ग्राहक एप्लिकेशन है।
  • लाइसेंस के मुद्दों के लिए, आप स्वतंत्र रूप से अपने MSI पैक
  • के साथ इस फ़ाइल को वितरित नहीं कर सकते OLB फ़ाइल या तो 'XP संस्करण या किसी नए

हमारे समाधान हो सकता है ग्राहक पर 2 टेबल के लिए किया जाता है फ़ाइल एक्सेस करें। एक उन सभी संदर्भों को सूचीबद्ध करता है जिन्हें स्टार्टअप समय पर चेक या जोड़ा जाना है (शब्द उनमें से एक होगा), और दूसरा फ़ाइल के सभी संभावित स्थानों को सूचीबद्ध करता है (इस पर निर्भर करता है कि उपयोगकर्ता के पास 'office11' संस्करण या नया है एक), 2 टेबल के बीच कई संबंधों के साथ।

तो, सबसे अच्छी रणनीति कोड के माध्यम से MSI पैक और प्रबंधन के बीच एक मिश्रण हो सकता है:

  • MSI स्वतंत्र dll के या इस तरह के activeX के रूप में अन्य फ़ाइलों कि पूरी तरह से कर रहे हैं अपने अनुप्रयोग में 'एम्बेडेड', वितरण के लिए अच्छा है नियंत्रण (जैसे स्कैनर नियंत्रण, रिपोर्ट या फ़ाइल दर्शक, आदि)
  • कोड सबसे अच्छा समाधान है जहां आपके ऐप को अन्य एप्लिकेशन (शब्द, एक्सेल, दृष्टिकोण, आदि) के साथ संवाद करना होगा जो आपके उपयोगकर्ता की मशीनों पर विभिन्न संस्करणों में मौजूद हो सकते हैं ।
5

अधिकांश भाग के लिए, देर से बाध्यकारी वीबीए में संदर्भों के साथ समस्याओं का समाधान करेगा, जब तक कि आपके पास कुछ असामान्य संदर्भ न हों। लाइब्रेरी संस्करणों में मतभेदों के कारण अधिकांश समस्याएं होती हैं जिन्हें देर से बाध्यकारी से दूर किया जा सकता है। वीबीए के साथ, अक्सर यह अनुशंसा की जाती है कि आप प्रारंभिक बाध्यकारी के साथ विकसित हों लेकिन देर से बाध्यकारी के साथ रिलीज़ करें। लेट बाइंडिंग का मुख्य नुकसान बदलते मूल्यों को अंतर्निहित है स्थिरांक (गति नहीं रह गया है मुद्दा यह हुआ करता था।)

तो:

Dim fs As Object 'Instead of FileSystemObject ' 
Dim xl As Object 'Instead of Excel.Application ' 

Set fs=CreateObject("Scripting.FileSystemObject") 
Set xl=CreateObject("Excel.Application") 

'Value instead of built-in constant ' 
ForReading=2 
Set f = fs.OpenTextFile("c:\testfile.txt", ForReading)