खोज…


बाइट

Dim Value As Byte

एक बाइट एक अहस्ताक्षरित 8 बिट डेटा प्रकार है। यह 0 और 255 के बीच पूर्णांक संख्याओं का प्रतिनिधित्व कर सकता है और उस सीमा के बाहर एक मूल्य को संग्रहीत करने का प्रयास करने के परिणामस्वरूप रनटाइम त्रुटि 6: Overflow । बाइट वीबीए में उपलब्ध एकमात्र आंतरिक अहस्ताक्षरित प्रकार है।

बाइट में बदलने के लिए कास्टिंग फंक्शन CByte() । फ्लोटिंग पॉइंट प्रकारों से कास्ट के लिए, परिणाम .5 राउंडिंग के साथ निकटतम पूर्णांक मान पर गोल होता है।

बाइट एरेस एंड स्ट्रिंग्स

स्ट्रिंग्स और बाइट सरणियों को एक दूसरे के लिए सरल असाइनमेंट (कोई आवश्यक रूपांतरण कार्य नहीं) के माध्यम से प्रतिस्थापित किया जा सकता है।

उदाहरण के लिए:

Sub ByteToStringAndBack()

Dim str As String
str = "Hello, World!"

Dim byt() As Byte
byt = str

Debug.Print byt(0)  ' 72

Dim str2 As String
str2 = byt

Debug.Print str2    ' Hello, World!

End Sub

यूनिकोड वर्णों को एनकोड करने में सक्षम होने के लिए, स्ट्रिंग में प्रत्येक वर्ण सरणी में दो बाइट्स लेता है, कम से कम महत्वपूर्ण बाइट पहले के साथ। उदाहरण के लिए:

Sub UnicodeExample()

Dim str As String
str = ChrW(&H2123) & "."  ' Versicle character and a dot

Dim byt() As Byte
byt = str

Debug.Print byt(0), byt(1), byt(2), byt(3)  ' Prints: 35,33,46,0

End Sub

पूर्णांक

Dim Value As Integer

एक इंटेगर एक हस्ताक्षरित 16 बिट डेटा प्रकार है। यह -32,768 से 32,767 की सीमा में पूर्णांक संख्याओं को संग्रहीत कर सकता है और उस सीमा के बाहर एक मूल्य को संग्रहीत करने का प्रयास करने के परिणामस्वरूप रनटाइम त्रुटि 6: अतिप्रवाह होगा।

इंटेगर को स्मृति में संग्रहीत किया जाता है, दो-पूरक के रूप में प्रतिनिधित्व किए गए नकारात्मक के साथ छोटे-एंडियन मूल्यों के रूप में।

ध्यान दें कि सामान्य रूप से, जब तक छोटे प्रकार के सदस्य नहीं होते हैं, तब तक इंटगर के बजाय लॉन्ग का उपयोग करना बेहतर अभ्यास होता है या इसकी आवश्यकता होती है (या तो एपीआई कॉलिंग कन्वेंशन या किसी अन्य कारण से) 2 बाइट्स। ज्यादातर मामलों में VBA इंटर्जर को 32 बिट के रूप में मानता है, इसलिए आमतौर पर छोटे प्रकार का उपयोग करने का कोई फायदा नहीं है। इसके साथ ही, हर बार एक प्रदर्शन प्रकार का जुर्माना लगाया जाता है जब एक इंटेगर प्रकार का उपयोग किया जाता है क्योंकि यह चुपचाप एक लंबी डाली जाती है।

एक पूर्णांक में बदलने के लिए कास्टिंग फ़ंक्शन CInt() । फ्लोटिंग पॉइंट प्रकारों से कास्ट के लिए, परिणाम .5 राउंडिंग के साथ निकटतम पूर्णांक मान पर गोल होता है।

बूलियन

Dim Value As Boolean

एक बूलियन का उपयोग उन मूल्यों को संग्रहीत करने के लिए किया जाता है जिन्हें सच या गलत के रूप में दर्शाया जा सकता है। आंतरिक रूप से, डेटा प्रकार को 16 बिट मान के रूप में संग्रहीत किया जाता है, जिसमें 0 का प्रतिनिधित्व गलत और किसी अन्य मूल्य का प्रतिनिधित्व करता है।

यह ध्यान दिया जाना चाहिए कि जब एक बूलियन एक संख्यात्मक प्रकार के लिए डाली जाती है, तो सभी बिट्स 1 पर सेट हो जाते हैं। इसके परिणामस्वरूप हस्ताक्षरित प्रकारों के लिए -1 का आंतरिक प्रतिनिधित्व होता है और एक अहस्ताक्षरित प्रकार (बाइट) के लिए अधिकतम मूल्य होता है।

Dim Example As Boolean
Example = True
Debug.Print CInt(Example)  'Prints -1
Debug.Print CBool(42)      'Prints True
Debug.Print CByte(True)    'Prints 255

एक बूलियन में बदलने के लिए कास्टिंग समारोह CBool() । भले ही इसे आंतरिक रूप से 16 बिट संख्या के रूप में दर्शाया जाता है, लेकिन उस सीमा के बाहर के मूल्यों से बुलियन को कास्टिंग करना अतिप्रवाह से सुरक्षित है, हालांकि यह सभी 16 बिट्स को 1 पर सेट करता है:

Dim Example As Boolean
Example = CBool(2 ^ 17)
Debug.Print CInt(Example)   'Prints -1
Debug.Print CByte(Example)  'Prints 255

लंबा

Dim Value As Long

एक लॉन्ग एक हस्ताक्षरित 32 बिट डेटा प्रकार है। यह पूर्णांक संख्याओं को -2,147,483,648 से 2,147,483,647 की सीमा में संग्रहीत कर सकता है और उस सीमा के बाहर एक मूल्य को संग्रहित करने का प्रयास करने से रनटाइम त्रुटि 6 हो जाएगी: अतिप्रवाह।

स्मृति के दो-पूरक के रूप में प्रतिनिधित्व किए जाने वाले नकारात्मक के साथ लिँग को छोटे-एंडियन मूल्यों के रूप में संग्रहीत किया जाता है।

ध्यान दें कि चूंकि एक 32 बिट ऑपरेटिंग सिस्टम में एक पॉइंटर की चौड़ाई से मेल खाता है, इसलिए आमतौर पर लॉन्ग का उपयोग एपीआई कार्यों के लिए और स्टोरिंग पॉइंटर्स को स्टोर करने और पास करने के लिए किया जाता है।

एक लंबी में बदलने के लिए कास्टिंग समारोह CLng() । फ्लोटिंग पॉइंट प्रकारों से कास्ट के लिए, परिणाम .5 राउंडिंग के साथ निकटतम पूर्णांक मान पर गोल होता है।

एक

Dim Value As Single

एक एकल एक हस्ताक्षरित 32 बिट फ्लोटिंग पॉइंट डेटा प्रकार है। यह एक छोटे-एंडियन IEEE 754 मेमोरी लेआउट का उपयोग करके आंतरिक रूप से संग्रहीत किया जाता है। जैसे, मानों की एक निश्चित श्रेणी नहीं है जो डेटा प्रकार द्वारा दर्शाया जा सकता है - जो सीमित है वह संग्रहीत मूल्य की शुद्धता है। एक एकल सटीकता के नुकसान के बिना -16,777,216 से 16,777,216 की सीमा में एक मान पूर्णांक मानों को संग्रहीत कर सकता है। फ्लोटिंग पॉइंट नंबरों की शुद्धता प्रतिपादक पर निर्भर करती है।

एक एकल अतिप्रवाह होगा यदि मोटे तौर पर 2 128 से अधिक मान असाइन किया गया हो। यह नकारात्मक घातांक के साथ अतिप्रवाह नहीं करेगा, हालांकि ऊपरी सीमा तक पहुंचने से पहले प्रयोग करने योग्य परिशुद्धता संदिग्ध होगी।

सभी फ्लोटिंग पॉइंट नंबरों के साथ, समानता की तुलना करते समय ध्यान रखा जाना चाहिए। सर्वोत्तम अभ्यास आवश्यक सटीकता के लिए उपयुक्त डेल्टा मूल्य को शामिल करना है।

एकल में बदलने के लिए कास्टिंग फ़ंक्शन CSng()

दोहरा

Dim Value As Double

एक डबल हस्ताक्षरित 64 बिट फ्लोटिंग पॉइंट डेटा प्रकार है। सिंगल की तरह, यह एक छोटे-एंडियन IEEE 754 मेमोरी लेआउट का उपयोग करके आंतरिक रूप से संग्रहीत किया जाता है और सटीक के बारे में समान सावधानी बरती जानी चाहिए। एक डबल परिशुद्धता के नुकसान के बिना -9,007,199,254,740,992 से 9,007,199,254,740,992 की सीमा में पूर्णांक मानों को संग्रहीत कर सकता है। फ्लोटिंग पॉइंट नंबरों की शुद्धता प्रतिपादक पर निर्भर करती है।

यदि एक मोटे तौर पर 2 1024 से अधिक मान असाइन किया गया है तो एक डबल ओवरफ्लो होगा। यह नकारात्मक घातांक के साथ अतिप्रवाह नहीं करेगा, हालांकि ऊपरी सीमा तक पहुंचने से पहले प्रयोग करने योग्य परिशुद्धता संदिग्ध होगी।

डबल में कनवर्ट करने के लिए कास्टिंग फ़ंक्शन CDbl()

मुद्रा

Dim Value As Currency

एक मुद्रा एक हस्ताक्षरित 64 बिट फ्लोटिंग पॉइंट डेटा प्रकार है जो एक डबल के समान है, लेकिन दशमलव बिंदु के दाईं ओर 4 अंकों को अधिक सटीकता देने के लिए 10,000 से स्केल किया गया है। एक मुद्रा चर -922,337,203,685,477.5808 से 922,337,203,685,477.5807 तक मूल्यों को संग्रहीत कर सकता है, यह एक 32 बिट एप्लिकेशन में किसी भी आंतरिक प्रकार की सबसे बड़ी क्षमता देता है। जैसा कि डेटा प्रकार का नाम है, मौद्रिक गणना का प्रतिनिधित्व करते समय इस डेटा प्रकार का उपयोग करने के लिए सबसे अच्छा अभ्यास माना जाता है क्योंकि स्केलिंग गोलाई त्रुटियों से बचने में मदद करता है।

एक मुद्रा में बदलने के लिए कास्टिंग फ़ंक्शन CCur()

दिनांक

Dim Value As Date

(हालांकि नीचे नोट देखें) दिनांक प्रकार दशमलव दिसंबर 30 वें, 1899 के युग तारीख से दिनों की संख्या का प्रतिनिधित्व करने के बाईं ओर मूल्य के साथ एक पर हस्ताक्षर किए 64 बिट चल बिन्दु डेटा प्रकार के रूप में आंतरिक रूप प्रतिनिधित्व किया है। दशमलव के दाईं ओर का मान समय को भिन्नात्मक दिन के रूप में दर्शाता है। इस प्रकार, पूर्णांक तिथि का समय 12:00:00 बजे का समय घटक होगा और x.5 का समय घटक 12:00:00 बजे होगा।

तिथियां के लिए मान्य मान जनवरी 1 100 और 31 दिसम्बर सेंट 9999 के बाद से एक डबल एक बड़ी रेंज है, यह मान कि सीमा के बाहर सौंप कर दिनांक अतिप्रवाह के लिए संभव है के बीच हैं।

जैसे, यह एक दो बार तारीख की गणना के लिए इस्तेमाल किया जा सकता है:

Dim MyDate As Double
MyDate = 0                                  'Epoch date.
Debug.Print Format$(MyDate, "yyyy-mm-dd")   'Prints 1899-12-30.
MyDate = MyDate + 365
Debug.Print Format$(MyDate, "yyyy-mm-dd")   'Prints 1900-12-30.

दिनांक को परिवर्तित करने के लिए कास्टिंग फ़ंक्शन CDate() , जो किसी भी संख्यात्मक प्रकार स्ट्रिंग दिनांक / समय प्रतिनिधित्व को स्वीकार करता है। यह ध्यान रखना महत्वपूर्ण है कि उपयोग में वर्तमान स्थानीय सेटिंग के आधार पर तारीखों के स्ट्रिंग प्रतिनिधित्व को परिवर्तित किया जाएगा, इसलिए कोड को पोर्टेबल होने का मतलब है, तो प्रत्यक्ष कलाकारों से बचा जाना चाहिए।

तार

एक स्ट्रिंग पात्रों के अनुक्रम का प्रतिनिधित्व करता है, और दो स्वादों में आता है:

परिवर्तनीय लंबाई

Dim Value As String

एक चर लंबाई स्ट्रिंग अपग्रेड और ट्रंकेशन की अनुमति देता है और इसे COM BSTR के रूप में मेमोरी में संग्रहीत किया जाता है। इसमें एक 4 बाइट अहस्ताक्षरित पूर्णांक शामिल होता है जो स्ट्रिंग डेटा की लंबाई के बाद स्ट्रिंग डेटा की लंबाई को विस्तृत वर्ण (प्रति वर्ण 2 बाइट्स) के रूप में संग्रहीत करता है और 2 शून्य बाइट्स के साथ समाप्त होता है। इस प्रकार, VBA द्वारा नियंत्रित की जाने वाली अधिकतम स्ट्रिंग लंबाई 2,147,483,647 वर्ण है।

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

क्योंकि लंबाई बदल सकती है, VBA चर के लिए हर बार मेमोरी को फिर से दिखाता है , जो चर को सौंपा गया है , जो उन प्रक्रियाओं के लिए प्रदर्शन दंड लगा सकता है जो उन्हें बार-बार बदलते हैं।

तय लंबाई

Dim Value As String * 1024    'Declares a fixed length string of 1024 characters.

निश्चित लंबाई के तारों को प्रत्येक वर्ण के लिए 2 बाइट्स आवंटित किए जाते हैं और एक साधारण बाइट सरणी के रूप में मेमोरी में संग्रहीत किया जाता है। एक बार आवंटित करने के बाद, स्ट्रिंग की लंबाई अपरिवर्तनीय है। वे स्मृति में शून्य समाप्त नहीं होते हैं, इसलिए एक स्ट्रिंग जो गैर-शून्य वर्णों के साथ आवंटित स्मृति को भरती है, एक शून्य समाप्त स्ट्रिंग की अपेक्षा एपीआई कार्यों को पारित करने के लिए अनुपयुक्त है।

निश्चित लंबाई के तार एक विरासत 16 बिट इंडेक्स सीमा से अधिक होते हैं, इसलिए केवल लंबाई में 65,535 वर्ण हो सकते हैं। उपलब्ध मेमोरी स्पेस की तुलना में लंबे समय तक मान असाइन करने का प्रयास करने से रनटाइम त्रुटि नहीं होगी - इसके बजाय परिणामी मूल्य को केवल छोटा किया जाएगा:

Dim Foobar As String * 5
Foobar = "Foo" & "bar"
Debug.Print Foobar          'Prints "Fooba"

किसी भी प्रकार के स्ट्रिंग में कनवर्ट करने के लिए कास्टिंग फ़ंक्शन CStr()

लम्बा लम्बा

Dim Value As LongLong

एक LongLong एक हस्ताक्षरित 64 बिट डेटा प्रकार है और केवल 64 बिट अनुप्रयोगों में उपलब्ध है। यह 64 बिट ऑपरेटिंग सिस्टम पर चलने वाले 32 बिट अनुप्रयोगों में उपलब्ध नहीं है। यह -9,223,372,036,854,775,808 से 9,223,372,036,854,775,807 की सीमा में पूर्णांक मानों को संग्रहीत कर सकता है और उस सीमा के बाहर एक मूल्य को संग्रहीत करने का प्रयास करने से रनटाइम त्रुटि 6 हो जाएगी: अतिप्रवाह।

LongLongs स्मृति में एक दो के पूरक के रूप में प्रतिनिधित्व नकारात्मक के साथ छोटे-एंडियन मूल्यों के रूप में संग्रहीत किए जाते हैं

LongLong डेटा प्रकार को VBA के 64 बिट ऑपरेटिंग सिस्टम समर्थन के हिस्से के रूप में पेश किया गया था। 64 बिट अनुप्रयोगों में, इस मूल्य का उपयोग 64 बिट एपीआई के लिए पॉइंटर्स को स्टोर और पास करने के लिए किया जा सकता है।

एक CLngLng() बदलने के लिए कास्टिंग फ़ंक्शन CLngLng() । फ्लोटिंग पॉइंट प्रकारों से कास्ट के लिए, परिणाम .5 राउंडिंग के साथ निकटतम पूर्णांक मान पर गोल होता है।

प्रकार

Dim Value As Variant    'Explicit
Dim Value               'Implicit

एक वेरिएंट एक COM डेटा प्रकार है जिसका उपयोग मनमाने प्रकार के मूल्यों को संग्रहीत करने और आदान-प्रदान करने के लिए किया जाता है, और VBA में किसी अन्य प्रकार को एक वेरिएंट को सौंपा जा सकता है। वेरिएबल्स द्वारा घोषित एक स्पष्ट प्रकार के बिना घोषित As [Type] डिफ़ॉल्ट रूप में वेरिएंट।

वेरिएंट को मेमोरी में एक VARIANT संरचना के रूप में संग्रहीत किया जाता है जिसमें एक बाइट प्रकार डिस्क्रिप्टर ( VARTYPE ) होता है, इसके बाद 6 आरक्षित बाइट्स और फिर 8 बाइट डेटा क्षेत्र होता है। संख्यात्मक प्रकार (दिनांक और बूलियन सहित) के लिए, अंतर्निहित मूल्य वैरिएंट में ही संग्रहीत किया जाता है। अन्य सभी प्रकारों के लिए, डेटा क्षेत्र में अंतर्निहित मान के लिए एक सूचक होता है।

यहाँ छवि विवरण दर्ज करें

वेरिएंट का अंतर्निहित प्रकार या तो VarType() फ़ंक्शन के साथ निर्धारित किया जा सकता है जो टाइप डिस्क्रिप्टर, या TypeName() फ़ंक्शन में संग्रहीत संख्यात्मक मान लौटाता है जो स्ट्रिंग प्रतिनिधित्व लौटाता है:

Dim Example As Variant
Example = 42
Debug.Print VarType(Example)    'Prints 2 (VT_I2)
Debug.Print TypeName(Example)   'Prints "Integer"
Example = "Some text"
Debug.Print VarType(Example)    'Prints 8 (VT_BSTR)
Debug.Print TypeName(Example)   'Prints "String"

क्योंकि वेरिएंट किसी भी प्रकार के मूल्यों को संग्रहीत कर सकता है, बिना प्रकार के संकेत के शाब्दिक से असाइनमेंट नीचे दी गई तालिका के अनुसार उपयुक्त प्रकार के वेरिएंट में डाले जाएंगे। प्रकार के संकेत वाले साहित्य को संकेतित प्रकार के वेरिएंट में डाला जाएगा।

मूल्य परिणाम प्रकार
स्ट्रिंग मूल्यों तार
इंटेगर रेंज में नॉन-फ्लोटिंग पॉइंट नंबर पूर्णांक
लॉन्ग रेंज में नॉन-फ्लोटिंग पॉइंट नंबर लंबा
लॉन्ग रेंज के बाहर नॉन-फ्लोटिंग पॉइंट नंबर दोहरा
सभी फ्लोटिंग पॉइंट नंबर दोहरा

नोट: जब तक एक भिन्नता का उपयोग करने का कोई विशिष्ट कारण नहीं है (यानी प्रत्येक लूप या एपीआई आवश्यकता के लिए एक पुनरावृत्ति), तो आमतौर पर निम्नलिखित कारणों से नियमित कार्यों के लिए टाला जाना चाहिए:

  • वे टाइप सुरक्षित नहीं हैं, रनटाइम त्रुटियों की संभावना बढ़ जाती है। उदाहरण के लिए, एक वैरिएंट एक इंटेगर वैल्यू रखने वाला चुपचाप ओवरफ्लो करने के बजाय लॉन्ग में बदल जाएगा।
  • वे कम से कम एक अतिरिक्त पॉइंटर डिफरेंस की आवश्यकता के द्वारा प्रोसेसिंग ओवरहेड का परिचय देते हैं।
  • एक वेरिएंट के लिए मेमोरी की आवश्यकता हमेशा अंतर्निहित प्रकार को स्टोर करने के लिए आवश्यकता से कम से कम 8 बाइट्स अधिक होती है।

वेरिएंट में बदलने का कार्य CVar()

LongPtr

Dim Value As LongPtr

LongPtr को 64 बिट प्लेटफॉर्म का समर्थन करने के लिए VBA में पेश किया गया था। 32 बिट सिस्टम पर, इसे लॉन्ग के रूप में माना जाता है और 64 बिट सिस्टम पर इसे लॉन्गलांग के रूप में माना जाता है।

यह प्राथमिक उपयोग दोनों आर्किटेक्चर पर पॉइंटर्स को स्टोर और पास करने के लिए एक पोर्टेबल तरीका प्रदान करने में है ( संकलन समय पर कोड व्यवहार बदलना देखें)।

यद्यपि यह एपीआई कॉल में उपयोग किए जाने पर ऑपरेटिंग सिस्टम द्वारा मेमोरी एड्रेस के रूप में व्यवहार किया जाता है, यह ध्यान दिया जाना चाहिए कि वीबीए इसे हस्ताक्षरित प्रकार की तरह व्यवहार करता है (और इसलिए हस्ताक्षरित अतिप्रवाह के अधीन है)। इस कारण से, LongPtrs का उपयोग करके किए गए किसी भी पॉइंटर अंकगणित को > या < तुलनाओं का उपयोग नहीं करना चाहिए। यह "क्विक" यह भी संभव बनाता है कि मेमोरी में वैध पते की ओर इशारा करते हुए सरल ऑफ़सेट जोड़ने से अतिप्रवाह त्रुटियों का कारण हो सकता है, इसलिए वीबीए में पॉइंटर्स के साथ काम करते समय सावधानी बरतनी चाहिए।

एक LongPtr में बदलने के लिए कास्टिंग फ़ंक्शन CLngPtr() । फ्लोटिंग पॉइंट प्रकारों के कलाकारों के लिए, परिणाम .5 के साथ निकटतम पूर्णांक मान पर गोल किया जाता है (हालांकि चूंकि यह आमतौर पर एक मेमोरी एड्रेस होता है, इसे फ्लोटिंग पॉइंट गणना के लिए असाइनमेंट लक्ष्य के रूप में उपयोग करना खतरनाक है)।

दशमलव

Dim Value As Variant
Value = CDec(1.234)

'Set Value to the smallest possible Decimal value
Value = CDec("0.0000000000000000000000000001")

Decimal डेटा-प्रकार केवल Variant उप-प्रकार के रूप में उपलब्ध है, इसलिए आपको किसी भी वैरिएबल को घोषित करना होगा जिसमें Decimal को Variant रूप में शामिल करने की आवश्यकता है और फिर CDec फ़ंक्शन का उपयोग करके Decimal मान असाइन करें। Decimal एक आरक्षित शब्द है (जो बताता है कि VBA अंततः प्रकार के लिए प्रथम श्रेणी का समर्थन जोड़ने जा रहा था), इसलिए Decimal को चर या प्रक्रिया नाम के रूप में उपयोग नहीं किया जा सकता है।

Decimal प्रकार में 14 बाइट्स मेमोरी की आवश्यकता होती है (मूल वेरिएंट द्वारा आवश्यक बाइट्स के अलावा) और 28 दशमलव स्थानों तक संख्याओं को संग्रहीत कर सकते हैं। बिना किसी दशमलव स्थानों की संख्या के लिए, अनुमत मानों की श्रेणी -79,228,162,514,264,337,593,543,950,335 से +79,228,162,514,264,337,593,543,50,335 समावेशी है। अधिकतम 28 दशमलव स्थानों वाले नंबरों के लिए, अनुमत मानों की श्रेणी -7.9228162514264337593543950335 से +7.9228162514264337593543950335 समावेशी है।



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