2012-03-28 26 views
9

मैं माइक्रोसॉफ्ट वीबीए में प्रोग्रामिंग कर रहा हूं। सबसे पहले मुझे मैक्रो की मदद से एक क्वेरीरीबल उत्पन्न करने की आवश्यकता है (मुझे इसके लिए कोड मिला है) और उसके बाद मैक्रोज़ की मदद से मुझे सूत्रों को लागू करने की आवश्यकता है जो क्वेरीटेबल में डेटा का उपयोग करते हैं। जिस समस्या का मैं सामना कर रहा हूं वह यह है कि QueryTable केवल उप के बाद दिखाई देता है, जिसमें उसका कोड है, काम करना समाप्त कर दिया है। इसका मतलब है कि मैं उस कोड को शामिल नहीं कर सकता जो इसमें सूत्र उत्पन्न करता है, क्योंकि सूत्रों के लिए कोई डेटा उत्पन्न नहीं होता है।वीबीए मॉड्यूल जो अन्य मॉड्यूल चलाता है

Run time error 1004 - cannot run the macro "macroname". The macro may not be available in this workbook or all macros may be disabled.

क्या समाधान हो सकता है:

Sub moduleController() 
    Run "Module1" 
    Run "Module2" 
End Sub 

यह त्रुटि देता है:

विचार अभी एक मॉड्यूल है कि अन्य मॉड्यूल चलाता लिखने के लिए है? शायद मेरी क्वेरीटेबल लोडिंग समस्या के लिए एक और समाधान है?

+0

आपके क्वेरीटेबल के साथ दो संभावित समस्याएं हैं। 1.) क्या आप इसे जोड़ने के बाद क्वेरी को रीफ्रेश कर रहे हैं? 2.) डिफ़ॉल्ट रूप से पृष्ठभूमि में ताज़ा करने के लिए नए प्रश्न सेट किए जाते हैं। यदि आप इसे नहीं बदलते हैं तो आपका मैक्रो क्वेरी समाप्त होने की प्रतीक्षा नहीं कर रहा है। अपनी क्वेरी को रीफ्रेश करने का प्रयास करें '। रीफ्रेश पृष्ठभूमिQuery: = गलत'। – mischab1

उत्तर

16

जब तक प्रश्न में मैक्रोज़ एक ही कार्यपुस्तिका में हैं और आप नाम मौजूद हैं, तो आप मॉड्यूल द्वारा नहीं, किसी भी अन्य मॉड्यूल से नाम से उन मैक्रोज़ को कॉल कर सकते हैं।

तो अगर Module1 में आप दो मैक्रो Macro1 और Macro2 और Module2 में आप Macro3 और मैक्रो 4, तो किसी अन्य मैक्रो में आप उन सब को कह सकते हैं था:

Sub MasterMacro() 
    Call Macro1 
    Call Macro2 
    Call Macro3 
    Call Macro4 
End Sub 
+0

इसके अलावा, यदि मैक्रो 1 - मैक्रो 4 मास्टरमाक्रो के समान मॉड्यूल में नहीं हैं, तो मैक्रो 1 - मैक्रो 4 को सार्वजनिक रूप से घोषित करने की आवश्यकता नहीं है, निजी नहीं। – mischab1

+0

धन्यवाद, जैरी! आपने इसे हल किया! यह ध्यान दिया जाना चाहिए कि एक और समस्या जिस पर मैंने ठोकर खाई थी वह यह था कि मैक्रो का नाम मॉड्यूल के नाम के समान नहीं हो सकता है। उन्हें अलग होना है! – ositra

2

क्या "मॉड्यूल 1" एक ही कार्यपुस्तिका का हिस्सा है जिसमें "मॉड्यूल नियंत्रक" है?
यदि नहीं, तो आप Application.Run someWorkbook.xlsm!methodOfModule का उपयोग करके "मॉड्यूल 1" की सार्वजनिक विधि को कॉल कर सकते हैं।

+0

हां, यह वही कार्यपुस्तिका पर है। फिर भी, कोड लाइन के लिए धन्यवाद! मैंने कुछ नया सीखा। – ositra

1

मैं सिर्फ कुछ नया धन्यवाद Artiso सीखा । मैंने प्रत्येक मॉड्यूल को गुण बॉक्स में एक नाम दिया। मॉड्यूल में मैंने ये नाम भी घोषित किए थे। जब मैंने अपना दूसरा मॉड्यूल कॉल करने का प्रयास किया, तो मुझे एक त्रुटि मिल रही है: संकलित त्रुटि: अपेक्षित चर या प्रक्रिया, मॉड्यूल नहीं

समान नाम रखने के बारे में आर्टिसो की टिप्पणी पढ़ने के बाद, मैंने अपना दूसरा मॉड्यूल बदल दिया, जिसे इसे से बुलाया गया पहला, और समस्या हल हो गई। दिलचस्प सामान! जानकारी Artiso के लिए धन्यवाद!

मामले में मेरे अनुभव स्पष्ट नहीं है:

मॉड्यूल का नाम: AllFSGroupsCY सार्वजनिक उप AllFSGroupsCY()

मॉड्यूल का नाम: AllFSGroupsPY सार्वजनिक उप AllFSGroupsPY()

AllFSGroupsCY से()

Public Sub FSGroupsCY() 

    AllFSGroupsPY 'will error each time until the properties name is changed 

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