खोज…
टिप्पणियों
ऑपरेटरों का मूल्यांकन निम्न क्रम में किया जाता है:
- गणितीय संचालक
- बिटवाइज़ ऑपरेटर
- कॉन्टैक्नेशन ऑपरेटर्स
- तुलनात्मक संचालक
- लॉजिकल ऑपरेटर्स
मिलान पूर्वता वाले ऑपरेटरों का मूल्यांकन बाएं से दाएं किया जाता है। समूह अभिव्यक्तियों के लिए कोष्ठक (
और )
का उपयोग करके डिफ़ॉल्ट आदेश को ओवरराइड किया जा सकता है।
गणितीय संचालक
वरीयता के क्रम में सूचीबद्ध:
टोकन | नाम | विवरण |
---|---|---|
^ | घातांक | बाएं हाथ के ऑपरेंड को दाएं हाथ के ऑपरेंड की शक्ति तक बढ़ाने का परिणाम लौटाएं। ध्यान दें कि घातांक द्वारा लौटाया गया मान हमेशा एक 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
फंक्शन बहुत ही कम इस्तेमाल किया जाता है। अंगूठे का एक अच्छा नियम यह है कि यदि आप इसका मतलब नहीं समझा सकते हैं, तो आपको दूसरे निर्माण का उपयोग करना चाहिए।