खोज…


टिप्पणियों

ऑपरेटरों का मूल्यांकन निम्न क्रम में किया जाता है:

  • गणितीय संचालक
  • बिटवाइज़ ऑपरेटर
  • कॉन्टैक्नेशन ऑपरेटर्स
  • तुलनात्मक संचालक
  • लॉजिकल ऑपरेटर्स

मिलान पूर्वता वाले ऑपरेटरों का मूल्यांकन बाएं से दाएं किया जाता है। समूह अभिव्यक्तियों के लिए कोष्ठक ( और ) का उपयोग करके डिफ़ॉल्ट आदेश को ओवरराइड किया जा सकता है।

गणितीय संचालक

वरीयता के क्रम में सूचीबद्ध:

टोकन नाम विवरण
^ घातांक बाएं हाथ के ऑपरेंड को दाएं हाथ के ऑपरेंड की शक्ति तक बढ़ाने का परिणाम लौटाएं। ध्यान दें कि घातांक द्वारा लौटाया गया मान हमेशा एक Double , चाहे मूल्य प्रकार विभाजित हो। गणना के प्रदर्शन के बाद एक चर प्रकार में परिणाम का कोई जोर पड़ता है।
/ प्रभाग बाएं हाथ के ऑपरेंड को राइट-हैंड ऑपरेंड द्वारा विभाजित करने का परिणाम देता है। ध्यान दें कि विभाजन द्वारा लौटाया गया मान हमेशा एक Double , चाहे मूल्य प्रकार विभाजित हो। गणना के प्रदर्शन के बाद एक चर प्रकार में परिणाम का कोई जोर पड़ता है।
* गुणन 2 ऑपरेंड का उत्पाद लौटाता है।
\ इंटेगर डिवीजन बाएं हाथ के ऑपरेंड को दाएं-हाथ के ऑपरेंड से विभाजित करने के पूर्णांक परिणाम को .5 राउंड के साथ दोनों पक्षों को गोल करने के बाद लौटाता है। विभाजन के किसी भी शेष को नजरअंदाज कर दिया जाता है। यदि दाहिने हाथ का ऑपरेंड (भाजक) 0 , तो रन-टाइम एरर 11: डिवीजन बाय जीरो होगा। ध्यान दें कि यह सभी राउंडिंग के बाद किया जाता है - 3 \ 0.4 जैसे अभिव्यक्तियां भी शून्य त्रुटि से विभाजन में परिणाम करेंगी।
Mod modulo दाएं-बाएं ऑपरेंड द्वारा बाएं-हाथ के ऑपरेंड को विभाजित करने के शेष पूर्णांक देता है। प्रत्येक पक्ष पर ऑपरेंड को विभाजन से पहले एक पूर्णांक तक गोल किया जाता है ।5 के साथ नीचे गोल। उदाहरण के लिए, दोनों 8.6 Mod 3 और 12 Mod 2.6 0 में परिणाम। यदि दाहिने हाथ का ऑपरेंड (भाजक) 0 , तो रन-टाइम एरर 11: डिवीजन बाय जीरो होगा। ध्यान दें कि यह सभी राउंडिंग के बाद किया जाता है - 3 Mod 0.4 जैसे अभिव्यक्तियां भी शून्य त्रुटि से विभाजन में परिणाम देंगी।
- घटाव बाएं हाथ के ऑपरेंड से दाएं-हाथ के ऑपरेंड को घटाने का परिणाम देता है।
+ जोड़ 2 ऑपरेंड का योग देता है। ध्यान दें कि जब यह String लिए लागू किया जाता है तो इस टोकन को एक कॉन्टैक्शन ऑपरेटर के रूप में भी माना जाता है। कॉन्टैक्शंस ऑपरेटर्स देखें।

1 गुणन और विभाजन को एक ही मिसाल के रूप में माना जाता है।

2 जोड़ और घटाव को एक ही मिसाल के रूप में माना जाता है।

कॉनटेनटेशन ऑपरेटर्स

VBA 2 अलग-अलग संघटन संचालकों का समर्थन करता है, + और & और दोनों एक ही कार्य करते हैं जब String प्रकारों के साथ उपयोग किया जाता है - दाहिने हाथ के String को बाएं हाथ के String के अंत में जोड़ा जाता है।

यदि String अलावा किसी अन्य प्रकार के साथ & ऑपरेटर का उपयोग किया जाता है, तो यह संक्षिप्त रूप से String से पहले डाली जाती है।

ध्यान दें कि + संयोजन ऑपरेटर की एक अधिभार है + अलावा ऑपरेटर। + का व्यवहार ऑपरेटर के चर प्रकारों और ऑपरेटर प्रकारों की पूर्ववर्तीता से निर्धारित होता है। दोनों ऑपरेंड एक के रूप में लिखे जाते हैं तो String या Variant की एक उप-प्रकार के साथ String , वे concatenated रहे हैं:

Public Sub Example()
    Dim left As String
    Dim right As String
    
    left = "5"
    right = "5"
    
    Debug.Print left + right    'Prints "55"
End Sub

यदि दोनों ओर एक संख्यात्मक प्रकार है और दूसरी तरफ एक String जिसे एक संख्या में संयोजित किया जा सकता है, तो गणितीय संचालकों की पूर्ववर्ती प्रवृत्ति ऑपरेटर को अतिरिक्त ऑपरेटर के रूप में माना जाता है और संख्यात्मक मान जोड़े जाते हैं:

Public Sub Example()
    Dim left As Variant
    Dim right As String
    
    left = 5
    right = "5"
    
    Debug.Print left + right    'Prints 10
End Sub

इस व्यवहार से सूक्ष्म, हार्ड डिबग त्रुटियों के लिए नेतृत्व किया जा सकता है - खासकर अगर Variant प्रकार का उपयोग किया जा रहा है, इसलिए केवल & ऑपरेटर को आमतौर पर संघनन के लिए उपयोग किया जाना चाहिए।

तुलना संचालक

टोकन नाम विवरण
= के बराबर रिटर्न True , तो बाएं हाथ और दाएँ हाथ ऑपरेंड बराबर हैं। ध्यान दें कि यह असाइनमेंट ऑपरेटर का अधिभार है।
<> बराबर नही है रिटर्न True , तो बाएं हाथ और दाएँ हाथ ऑपरेंड बराबर नहीं हैं।
> से अधिक रिटर्न True अगर बाएं हाथ का संचालन दाहिने हाथ के ऑपरेंड से अधिक है।
< से कम रिटर्न True अगर बाएं हाथ का संचालन दाहिने हाथ के ऑपरेंड से कम है।
>= से बड़ा या बराबर रिटर्न True , तो बाएं हाथ संकार्य से अधिक या दायां संकार्य के बराबर है।
<= इससे कम या इसके बराबर रिटर्न True , तो अगर बाएं हाथ संकार्य से कम या दायां संकार्य के बराबर है।
Is संदर्भ इक्विटी अगर यह True तो बाएं हाथ का ऑब्जेक्ट संदर्भ राइट-हैंड ऑब्जेक्ट संदर्भ के समान है। इसका उपयोग दोनों ओर Nothing (शून्य वस्तु संदर्भ) के साथ किया जा सकता है। नोट: Is ऑपरेटर एक में दोनों ऑपरेंड मजबूर करने का प्रयास करेंगे Object तुलना प्रदर्शन से पहले। यदि दोनों ओर एक आदिम प्रकार या एक Variant है जिसमें एक ऑब्जेक्ट (या तो एक गैर-वस्तु उपप्रकार या vtEmpty ) नहीं है, तो तुलना रन-टाइम त्रुटि 424 में परिणाम देगी - "ऑब्जेक्ट आवश्यक"। यदि या तो ऑपरेंड उसी ऑब्जेक्ट के एक अलग इंटरफ़ेस से संबंधित है, तो तुलना True वापस आ जाएगी। यदि आपको उदाहरण और इंटरफ़ेस दोनों की इक्विटी के लिए परीक्षण करने की आवश्यकता है, तो इसके बजाय ObjPtr(left) = ObjPtr(right) उपयोग करें।

टिप्पणियाँ

VBA सिंटैक्स तुलना ऑपरेटरों की "चेन" के लिए अनुमति देता है, लेकिन इन निर्माणों को आमतौर पर टाला जाना चाहिए। तुलना हमेशा एक समय में केवल 2 ऑपरेंड पर बाएं से दाएं की जाती है, और प्रत्येक तुलना Boolean । उदाहरण के लिए, अभिव्यक्ति ...

a = 2: b = 1: c = 0
expr = a > b > c

... कुछ संदर्भों में पढ़ा जा सकता है के रूप में है कि क्या का एक परीक्षण b के बीच है a और c । VBA में, यह निम्नानुसार मूल्यांकन करता है:

a = 2: b = 1: c = 0
expr = a > b > c
expr = (2 > 1) > 0
expr = True > 0
expr = -1 > 0 'CInt(True) = -1
expr = False

किसी भी तुलना के अलावा अन्य ऑपरेटर Is एक साथ इस्तेमाल किया Object के रूप में एक संकार्य के रिटर्न मान पर प्रदर्शन किया जाएगा Object की डिफ़ॉल्ट सदस्य । यदि ऑब्जेक्ट में डिफ़ॉल्ट सदस्य नहीं है, तो तुलना रन-टाइम त्रुटि 438 में होगी - "ऑब्जेक्ट उसकी संपत्ति या विधि का समर्थन नहीं करता है"।

यदि Object अनधिकृत है, तो तुलना रन-टाइम एरर 91 में होगी - "ऑब्जेक्ट वेरिएबल या ब्लॉक वेरिएबल सेट नहीं है"।

यदि शाब्दिक Nothing ईएसई के अलावा किसी भी तुलना ऑपरेटर के साथ प्रयोग Nothing किया जाता Is , तो यह एक संकलित त्रुटि के परिणामस्वरूप होगा - "ऑब्जेक्ट का अमान्य उपयोग"।

यदि Object का डिफ़ॉल्ट सदस्य एक अन्य Object , तो VBA लगातार प्रत्येक प्रकार के रिटर्न रिटर्न के डिफ़ॉल्ट सदस्य को तब तक कॉल करेगा, जब तक कि एक आदिम प्रकार वापस नहीं किया जाता है या एक त्रुटि उठाई जाती है। उदाहरण के लिए, मान SomeClass की डिफ़ॉल्ट सदस्य है Value है, जो का एक उदाहरण है ChildClass की एक डिफ़ॉल्ट के सदस्य के साथ ChildValue । तुलना...

Set x = New SomeClass
Debug.Print x > 42

... के रूप में मूल्यांकन किया जाएगा:

Set x = New SomeClass
Debug.Print x.Value.ChildValue > 42

यदि या तो ऑपरेंड एक संख्यात्मक प्रकार है और अन्य ऑपरेंड एक String या उप-प्रकार String का Variant है, तो एक संख्यात्मक तुलना की जाएगी। इस स्थिति में, यदि String को एक नंबर पर नहीं डाला जा सकता है, तो रन-टाइम त्रुटि 13 - "टाइप मिसमैच" के परिणामस्वरूप तुलना होगी।

यदि दोनों ऑपरेंड एक String या उपप्रकार String Variant , तो कोड मॉड्यूल के सेटिंग तुलना विकल्प के आधार पर एक स्ट्रिंग तुलना की जाएगी। इन तुलनाओं को चरित्र के आधार पर चरित्र के आधार पर किया जाता है। ध्यान दें कि एक संख्या वाले String का वर्ण प्रतिनिधित्व संख्यात्मक मानों की तुलना के समान नहीं है:

Public Sub Example()
    Dim left As Variant
    Dim right As Variant
    
    left = "42"
    right = "5"
    Debug.Print left > right              'Prints False
    Debug.Print Val(left) > Val(right)    'Prints True
End Sub

इस कारण से, सुनिश्चित करें कि उन पर संख्यात्मक असमानता प्रदर्शन करने से पहले String या Variant चर संख्याओं के लिए डाली जाती हैं।

यदि एक ऑपरेंड एक Date , तो अंतर्निहित डबल मान पर एक संख्यात्मक तुलना की जाएगी यदि अन्य ऑपरेंड संख्यात्मक है या एक संख्यात्मक प्रकार के लिए डाली जा सकती है।

यदि अन्य ऑपरेंड एक String या उपप्रकार String का Variant है, जिसे वर्तमान लोकेल का उपयोग करके किसी Date डाला जा सकता है, तो String को Date डाल दिया जाएगा। यदि यह वर्तमान लोकल में किसी Date को नहीं डाला जा सकता है, तो रन-टाइम त्रुटि 13 - "टाइप मिसमैच" का परिणाम तुलना से होगा।


Double या Single वैल्यू और बुलियन के बीच तुलना करते समय ध्यान रखा जाना चाहिए। अन्य संख्यात्मक प्रकारों के विपरीत, गैर-शून्य मानों को VBA के व्यवहार के प्रकार को बढ़ावा देने के कारण True के डेटा प्रकार को Double करने के लिए एक फ्लोटिंग पॉइंट संख्या शामिल करने के कारण True नहीं माना जा सकता है:

Public Sub Example()
    Dim Test As Double
    
    Test = 42        Debug.Print CBool(Test)             'Prints True.
    'True is promoted to Double - Test is not cast to Boolean
    Debug.Print Test = True             'Prints False
    
    'With explicit casts:
    Debug.Print CBool(Test) = True      'Prints True
    Debug.Print CDbl(-1) = CDbl(True)   'Prints True
End Sub

बिटवाइज \ _ लॉजिकल ऑपरेटर्स

VBA में सभी तार्किक ऑपरेटरों को एक ही नाम के बिटवाइज़ ऑपरेटरों के "ओवरराइड" के रूप में माना जा सकता है। तकनीकी रूप से, उन्हें हमेशा बिटवाइज़ ऑपरेटरों के रूप में माना जाता है। VBA में सभी तुलनात्मक ऑपरेटर एक बूलियन को लौटाते हैं, जिसके पास हमेशा अपने बिट सेट ( False ) या उसके सभी बिट सेट ( True ) नहीं होंगे। लेकिन यह किसी भी बिट सेट के साथ एक मान को True मान लेगा। इसका मतलब यह है कि एक Boolean (तुलनाकर्ता संचालकों को देखें) की अभिव्यक्ति का बिटवाइज़ परिणाम हमेशा एक तार्किक अभिव्यक्ति के रूप में माना जाएगा।

इन ऑपरेटरों में से किसी एक का उपयोग करके अभिव्यक्ति के परिणाम को सौंपने से बिटवाइज़ परिणाम प्राप्त होगा। ध्यान दें कि नीचे दी गई सत्य सारणी में, 0 False बराबर है और 1 True बराबर है।


And

यदि रिटर्न True तो दोनों पक्षों के भाव True मूल्यांकन करते हैं।

बाएं हाथ का ऑपरेंड दाहिने हाथ का संचालन परिणाम
0 0 0
0 1 0
1 0 0
1 1 1

Or

रिटर्न True , तो करने के लिए अभिव्यक्ति का मूल्यांकन के दोनों ओर True

बाएं हाथ का ऑपरेंड दाहिने हाथ का संचालन परिणाम
0 0 0
0 1 1
1 0 1
1 1 1

Not

यदि एक्सप्रेशन False और False मूल्यांकन करता है तो यह True कि अगर एक्सप्रेशन True मूल्यांकन करता है।

दाहिने हाथ का संचालन परिणाम
0 1
1 0

बाएं हाथ के ऑपरेंड के बिना एकमात्र ऑपरेंड Not है। विज़ुअल बेसिक एडिटर स्वचालित रूप से बाएं हाथ के तर्क के साथ अभिव्यक्ति को सरल करेगा। यदि आप टाइप करते हैं ...

Debug.Print x Not y

... VBE लाइन को बदल देगा:

Debug.Print Not x

इसी प्रकार के सरलीकरण किसी भी अभिव्यक्ति है कि के लिए एक बाएं हाथ संकार्य (भाव सहित) का प्रयास किया जाएगा Not


Xor

"अनन्य या" के रूप में भी जाना जाता है। यदि दोनों अभिव्यक्तियाँ अलग-अलग परिणामों का मूल्यांकन करती हैं तो यह True

बाएं हाथ का ऑपरेंड दाहिने हाथ का संचालन परिणाम
0 0 0
0 1 1
1 0 1
1 1 0

ध्यान दें कि यद्यपि Xor ऑपरेटर का उपयोग तार्किक ऑपरेटर की तरह किया जा सकता है , लेकिन ऐसा करने का कोई कारण नहीं है क्योंकि यह तुलना ऑपरेटर <> के समान परिणाम देता है।


Eqv

"तुल्यता" के रूप में भी जाना जाता है। जब दोनों भाव एक ही परिणाम का मूल्यांकन करते हैं, तो True होता है।

बाएं हाथ का ऑपरेंड दाहिने हाथ का संचालन परिणाम
0 0 1
0 1 0
1 0 0
1 1 1

ध्यान दें कि Eqv फ़ंक्शन बहुत ही कम उपयोग किया जाता है क्योंकि x Eqv y बहुत अधिक पठनीय Not (x Xor y) बराबर है।


Imp

"निहितार्थ" के रूप में भी जाना जाता है। रिटर्न True अगर दोनों ऑपरेंड एक जैसे हैं या दूसरा ऑपरेंड True

बाएं हाथ का ऑपरेंड दाहिने हाथ का संचालन परिणाम
0 0 1
0 1 1
1 0 0
1 1 1

ध्यान दें कि Imp फंक्शन बहुत ही कम इस्तेमाल किया जाता है। अंगूठे का एक अच्छा नियम यह है कि यदि आप इसका मतलब नहीं समझा सकते हैं, तो आपको दूसरे निर्माण का उपयोग करना चाहिए।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow