हाय में और Evaluate() रहस्य
() VBA
MSDN कार्यालय डेवलपर संदर्भ (2013) प्रलेखन कहते हैं करने के लिए स्वागत का मूल्यांकन:
वर्ग कोष्ठक का उपयोग करना (उदाहरण के लिए, "[A1: सी 5]") को एक स्ट्रिंग तर्क के साथ मूल्यांकन विधि को कॉल करने के समान है।
तो, मैं यह देखने के लिए कैसे सही Microsoft's Documentation of the Evaluate() विधि है एक बहुत ही सरल कोड भाग गया है।
आश्चर्य की बात नहीं है, मैं लगातार परिणाम के बावजूद अजीब हो रहा हूं।
ध्यान दें:Immediate Window
CTRL + जी में 4 आदेशों में से प्रत्येक पर अमल। प्रत्येक कॉल में अंतर देखें। अंतर्निहित बगप्रत्येक MsgBox को दो बार दिखाता है। बस रखें कि मन में और उलझन में नहीं मिलता है ...
स्टिक इस कोड को एक मॉड्यूल में
Private Sub SleepESub()
Application.Wait Now + TimeValue("0:00:20")
MsgBox "w8'd "
End Sub
तो (एक समय में 1) इन 4 आदेश पर अमल तत्काल खिड़की
? Evaluate ("SleepESub()")
में ? [SleepESub()]
? [SleepESub]
? SleepESub
पहले 2 कोड को तुरंत निष्पादित करें; मेरे लिए मतलब है कि उन्होंने कोड का मूल्यांकन किया है। तीसरा एक (दस्तावेज़ीकरण के अनुसार)Evaluating
होना चाहिए, लेकिन यह उसी तरह से कार्य नहीं करता है जैसे जैसा कि यह मॉड्यूल के शरीर में करता है। तत्काल विंडो Error 2023
दे रही है, हालांकि मॉड्यूल के शरीर के भीतर से एक ही कॉल निष्पादित करता है जैसे कि आप उप-कॉल कर रहे थे। यह 20 seconds
की तरह प्रतीक्षा करता है जैसे कि यह सामान्य Call SleepESub()
था जो नंबर 4 कॉल है।
क्या कोई यह समझा सकता है कि मैं यहां क्या खो रहा हूं? क्या लाइन नंबर 3 उचित Evaluation
कॉल नहीं है? या यह उप खुद को कॉल का मूल्यांकन करता है (है कि अगर समझ में आता है)
अद्यतन:
मुझे लगता है कि कुछ लोगों को गलत समझ रहे हैं मैं यहाँ क्या मूल्यांकन कर रहा हूँ - चिंता मत करो यह एक उन्नत विषय है और मैं नहीं कर रहा हूँ एक पुस्तक लेखक और आप दिमागी पाठक नहीं हैं। (मुझे माफ़ कर दो ...)
बेहतर विचार पाने के लिए आप तत्काल विंडो बनाम मॉड्यूल के शरीर से परिणामों की तुलना कर सकते हैं।
' Run each of the calls separately
' in a module's body and compare it with
' the previous calls from the Immediate Window
Sub ModuleBody()
Evaluate ("SleepESub()")
'[SleepESub()]
'[SleepESub]
'SleepESub
End Sub
दिलचस्प। मुझे पिछले दो के लिए '?' को हटाने की जरूरत है। 'रन ("स्लीपसब")' और 'रन ("स्लीपसब()") समान हैं लेकिन 'मूल्यांकन (" स्लीपसब ") काम नहीं करता है। क्या चल रहा है?! –
एक्सेल 2010 के साथ (_Evaluate_ दस्तावेज़ 2013 के समान है), '? मूल्यांकन करें ("स्लीपसब") 'रिटर्न' त्रुटि 2029'; 'के लिए वही? [SleepESub] '। मैं निष्कर्ष निकालूंगा कि 2010 "साफ" है (दस्तावेज़ीकरण से मेल खाता है) –
@ डी-स्ट्रायर '? [स्लीपसब] '(* तत्काल विंडो से बुलाया गया *) एक 'त्रुटि 2029' वापस करता है, हालांकि यदि आप मॉड्यूल के शरीर में एक ही कॉल करते हैं तो यह काम करता है, हालांकि इसका मूल्यांकन नहीं कर रहा है जैसे कि आप उप-कॉल कर रहे थे । मैं आश्चर्यचकित हो रहा हूं कि इस मामले में स्क्वायर ब्रैकेट को अनदेखा किया जा रहा है क्योंकि संकलक * सोचता है * '[स्लीपसब] = स्लीपिसब '। दूसरी तरफ, यदि तत्काल विंडो एक त्रुटि दे रही है तो मॉड्यूल बॉडी से एक ही कॉल कैसे काम करता है? –