2010-04-07 7 views
8

मुझे पता है कि यह आसान लगता है, लेकिन प्रतीत होता है कि यह नहीं है।वर्ड वीबीए में एक उप के लिए रेंज कैसे पास करूं?

यदि मैं इसे वर्ड वीबीए में लिखता हूं, तो यह हमेशा "असंगत प्रकार" कहता है - क्यों? और मैं इसे कैसे काम करूं?

Sub GetRange() 
    Dim r As Range 
    Set r = ActiveDocument.Paragraphs(5).Range 

    ProcessRange (r) 
End Sub 

Sub ProcessRange(r As Range) 
    Debug.Print "This generates an error (incompatible types)- why?" 
End Sub 

उत्तर

4

प्रक्रिया रेंज एक sub तो कोष्ठकों के साथ यह आह्वान नहीं है। (त्रुटि होती है क्योंकि (r) का कारण बनता है r मूल्यांकन किया जाना है जो उसके डिफ़ॉल्ट संपत्ति के मूल्य जो इतनी प्रकार range बेमेल क्या ProcessRange उम्मीद की नहीं है रिटर्न

उपयोग या तो;।

ProcessRange r 

या

call ProcessRange(r) 
8

को Sub को ब्रांड्स के साथ कॉल करने की अनुमति नहीं है, सिवाय इसके कि आप Call कथन का उपयोग कर रहे हैं।

इसलिए आप का उपयोग करने के लिए है या तो:

Call ProcessRange(r) 

या:

ProcessRange r 

कि के लिए कारण VBA (और VBS, VB6, भी) में कोष्ठक एक पूरी बहुत कुछ है सकते हैं विभिन्न अर्थों के।

आपके मामले में ProcessRange पर परिणाम पारित करने से पहलेका मूल्यांकन किया जाएगा। इस मामले में यह string उप को पास किया जा रहा है, क्योंकि Range की डिफ़ॉल्ट संपत्ति Text है। http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

3

कोष्टक Visual Basic का उपयोग मानता है कि आपके एक समारोह कॉल कर रहे हैं:

पूर्वावलोकन के लिए इस लेख देखें।

ProcessRange r 

काम कर देता है