खोज…
स्पष्ट और स्पष्ट घोषणा
यदि किसी कोड मॉड्यूल में मॉड्यूल के शीर्ष पर Option Explicit
शामिल नहीं है, तो कंपाइलर स्वचालित रूप से (अर्थात, "अंतर्निहित रूप से") आपके लिए वैरिएबल बनाते हैं जब आप उनका उपयोग करते हैं। वे वेरिएबल टाइप Variant
को डिफॉल्ट करेंगे।
Public Sub ExampleDeclaration()
someVariable = 10 '
someOtherVariable = "Hello World"
'Both of these variables are of the Variant type.
End Sub
उपर्युक्त कोड में, यदि Option Explicit
है, तो कोड बाधित हो जाएगा क्योंकि यह कुछ someVariable
और someOtherVariable
लिए आवश्यक Dim
स्टेटमेंट को याद नहीं कर someOtherVariable
।
Option Explicit
Public Sub ExampleDeclaration()
Dim someVariable As Long
someVariable = 10
Dim someOtherVariable As String
someOtherVariable = "Hello World"
End Sub
कोड मॉड्यूल में विकल्प स्पष्ट का उपयोग करने के लिए सबसे अच्छा अभ्यास माना जाता है, यह सुनिश्चित करने के लिए कि आप सभी चर घोषित करते हैं।
VBA के सर्वोत्तम अभ्यासों को देखें कि डिफ़ॉल्ट रूप से इस विकल्प को कैसे सेट करें।
चर
क्षेत्र
एक चर घोषित किया जा सकता है (दृश्यता स्तर बढ़ाने में):
- प्रक्रिया स्तर पर, किसी भी प्रक्रिया में
Dim
कीवर्ड का उपयोग करना; एक स्थानीय चर । - मॉड्यूल स्तर पर, किसी भी प्रकार के मॉड्यूल में
Private
कीवर्ड का उपयोग करना; एक निजी क्षेत्र । - उदाहरण के स्तर पर, किसी भी प्रकार के क्लास मॉड्यूल में
Friend
कीवर्ड का उपयोग करना; एक मित्र क्षेत्र । - उदाहरण के स्तर पर, किसी भी प्रकार के क्लास मॉड्यूल में
Public
कीवर्ड का उपयोग करना; एक सार्वजनिक क्षेत्र । - एक मानक मॉड्यूल में
Public
कीवर्ड का उपयोग करके विश्व स्तर पर; एक वैश्विक चर ।
चर को हमेशा सबसे छोटे संभव दायरे के साथ घोषित किया जाना चाहिए: वैश्विक चर घोषित करने के बजाय प्रक्रियाओं को पारित करने के मापदंडों को प्राथमिकता दें।
अधिक जानकारी के लिए एक्सेस संशोधक देखें।
स्थानीय चर
स्थानीय चर घोषित करने के लिए Dim
कीवर्ड का उपयोग करें:
Dim identifierName [As Type][, identifierName [As Type], ...]
[As Type]
वाक्य [As Type]
घोषणा सिंटैक्स का हिस्सा वैकल्पिक है। निर्दिष्ट होने पर, यह चर के डेटा प्रकार को निर्धारित करता है, जो यह निर्धारित करता है कि उस चर को कितनी मेमोरी आवंटित की जाएगी। यह String
चर घोषित करता है:
Dim identifierName As String
जब कोई प्रकार निर्दिष्ट नहीं किया जाता है, तो प्रकार स्पष्ट रूप से Variant
:
Dim identifierName 'As Variant is implicit
VBA सिंटैक्स एक कथन में कई चर घोषित करने का समर्थन करता है:
Dim someString As String, someVariant, someValue As Long
ध्यान दें कि [As Type]
को प्रत्येक वेरिएबल ('वेरिएंट' के अलावा) के लिए निर्दिष्ट किया जाना है। यह एक अपेक्षाकृत आम जाल है:
Dim integer1, integer2, integer3 As Integer 'Only integer3 is an Integer.
'The rest are Variant.
स्थैतिक चर
स्थानीय चर भी Static
हो सकते हैं। VBA में Static
कीवर्ड का उपयोग चर को "याद रखने" के लिए किया जाता है, जिसका मूल्य था, पिछली बार एक प्रक्रिया कहा गया था:
Private Sub DoSomething()
Static values As Collection
If values Is Nothing Then
Set values = New Collection
values.Add "foo"
values.Add "bar"
End If
DoSomethingElse values
End Sub
यहां values
संग्रह को Static
लोकल के रूप में घोषित किया गया है; क्योंकि यह एक ऑब्जेक्ट वैरिएबल है , इसे Nothing
इनिशियलाइज़ किया जाता है। घोषणा के बाद की स्थिति इस बात की पुष्टि करती है कि यदि ऑब्जेक्ट संदर्भ पहले Set
गया था - यदि यह पहली बार प्रक्रिया चलती है, तो संग्रह आरंभ हो जाता है। DoSomethingElse
आइटम जोड़ना या निकालना हो सकता है, और वे अभी भी अगली बार संग्रह में होंगे DoSomething
कहा जाता है।
विकल्प
वीबीए का
Static
कीवर्ड आसानी से गलत समझा जा सकता है - विशेष रूप से अनुभवी प्रोग्रामर द्वारा जो आमतौर पर अन्य भाषाओं में काम करते हैं। कई भाषाओं में, एक वर्ग सदस्य (क्षेत्र, संपत्ति, विधि, ...) बनाने के लिएstatic
का उपयोग उदाहरण के बजाय प्रकार से होता है। उदाहरण के संदर्भ में कोडstatic
संदर्भ में कोड नहीं हो सकता। VBAStatic
कीवर्ड का अर्थ है कि बेतहाशा अलग।
अक्सर, एक Static
स्थानीय बस एक Private
, मॉड्यूल-स्तरीय चर (क्षेत्र) के रूप में लागू किया जा सकता है - हालांकि यह उस सिद्धांत को चुनौती देता है जिसके द्वारा एक चर को सबसे कम संभव गुंजाइश के साथ घोषित किया जाना चाहिए; अपनी प्रवृत्ति पर विश्वास करें, आप जो भी पसंद करते हैं उसका उपयोग करें - दोनों काम करेंगे ... लेकिन Static
का उपयोग बिना यह समझे कि इससे दिलचस्प कीड़े हो सकते हैं।
डिम बनाम प्राइवेट
Dim
कीवर्ड प्रक्रिया और मॉड्यूल स्तरों पर कानूनी है; मॉड्यूल स्तर पर इसका उपयोग Private
कीवर्ड के उपयोग के बराबर है:
Option Explicit
Dim privateField1 As Long 'same as Private privateField2 as Long
Private privateField2 As Long 'same as Dim privateField2 as Long
Private
कीवर्ड मॉड्यूल स्तर पर केवल कानूनी है; यह स्थानीय चरों के लिए Dim
को Dim
करने और Private
साथ मॉड्यूल चर घोषित करने के लिए आमंत्रित करता है, विशेष रूप से विषम Public
कीवर्ड के साथ, जिसका उपयोग सार्वजनिक सदस्य घोषित करने के लिए किसी भी तरह से किया जाना होगा। वैकल्पिक रूप से उपयोग करने Dim
हर जगह - क्या मायने रखती है निरंतरता है:
"निजी क्षेत्र"
- डीओ का उपयोग
Private
एक मॉड्यूल-स्तर चर घोषित करने के लिए। - डीओ का उपयोग
Dim
एक स्थानीय चर घोषित करने के लिए। - मॉड्यूल-स्तरीय चर घोषित करने के लिए
Dim
का उपयोग न करें।
"हर जगह मंद"
- डीओ उपयोग
Dim
कुछ भी निजी / स्थानीय घोषित करने के लिए। - मॉड्यूल-स्तरीय चर घोषित करने के लिए
Private
का उपयोग न करें। -
Public
क्षेत्रों की घोषणा AVOID । *
* सामान्य तौर पर, किसी को भी Public
या Global
क्षेत्र घोषित करने से बचना चाहिए।
खेत
मॉड्यूल बॉडी के शीर्ष पर घोषित अनुभाग में मॉड्यूल स्तर पर घोषित एक चर, एक क्षेत्र है । एक मानक मॉड्यूल में घोषित एक Public
क्षेत्र एक वैश्विक चर है :
Public PublicField As Long
वैश्विक दायरे वाले एक चर को अन्य VBA परियोजनाओं सहित कहीं से भी एक्सेस किया जा सकता है, जो उस परियोजना को संदर्भित करता है जिसे वह घोषित करता है।
एक वैरिएबल को वैश्विक / सार्वजनिक बनाने के लिए, लेकिन केवल इस परियोजना के भीतर से ही, Friend
संशोधक का उपयोग करें:
Friend FriendField As Long
यह ऐड-इन में विशेष रूप से उपयोगी है, जहां आशय यह है कि अन्य VBA प्रोजेक्ट ऐड-इन प्रोजेक्ट को संदर्भित करते हैं और सार्वजनिक API का उपभोग कर सकते हैं।
Friend FriendField As Long 'public within the project, aka for "friend" code
Public PublicField As Long 'public within and beyond the project
मित्र क्षेत्र मानक मॉड्यूल में उपलब्ध नहीं हैं।
इंस्टेंस फील्ड्स
एक चर मॉड्यूल स्तर पर घोषित, (सहित एक वर्ग मॉड्यूल के मुख्य भाग के ऊपर घोषणाओं अनुभाग में ThisWorkbook
, ThisDocument
, Worksheet
, UserForm
और वर्ग मॉड्यूल), एक उदाहरण क्षेत्र है: यह केवल तब तक का एक उदाहरण है के रूप में मौजूद चारों ओर कक्षा।
'> Class1
Option Explicit
Public PublicField As Long
'> Module1
Option Explicit
Public Sub DoSomething()
'Class1.PublicField means nothing here
With New Class1
.PublicField = 42
End With
'Class1.PublicField means nothing here
End Sub
खेतों को अतिक्रमित करना
उदाहरण डेटा अक्सर रखा है Private
, और समझाया करार दिया। Property
प्रक्रिया का उपयोग करके एक निजी क्षेत्र को उजागर किया जा सकता है। एक निजी वैरिएबल को सार्वजनिक रूप से उजागर करने के लिए बिना कॉलर को एक्सेस दिए, क्लास मॉड्यूल (या एक मानक मॉड्यूल) एक Property Get
सदस्य को लागू करता है:
Option Explicit
Private encapsulated As Long
Public Property Get SomeValue() As Long
SomeValue = encapsulated
End Property
Public Sub DoSomething()
encapsulated = 42
End Sub
वर्ग खुद को समझाया मूल्य को संशोधित कर सकता है, लेकिन कॉलिंग कोड केवल Public
सदस्यों (और Friend
सदस्यों, यदि कॉलर एक ही परियोजना में है) तक पहुंच सकता है।
कॉल करने वाले को संशोधित करने की अनुमति देने के लिए:
- एक एनकैप्सुलेटेड वैल्यू , एक मॉड्यूल
Property Let
मेंबर को उजागर करता है। - एक एन्कैप्सुलेटेड ऑब्जेक्ट संदर्भ , एक मॉड्यूल एक
Property Set
सदस्य को उजागर करता है।
लगातार (कांस्ट)
यदि आपके पास एक ऐसा मूल्य है जो आपके आवेदन में कभी नहीं बदलता है, तो आप एक नामित स्थिरांक को परिभाषित कर सकते हैं और इसे शाब्दिक मूल्य के स्थान पर उपयोग कर सकते हैं।
आप केवल मॉड्यूल या प्रक्रिया स्तर पर ही कॉन्स्ट का उपयोग कर सकते हैं। इसका मतलब है कि एक चर के लिए घोषणा संदर्भ एक वर्ग, संरचना, मॉड्यूल, प्रक्रिया या ब्लॉक होना चाहिए, और एक स्रोत फ़ाइल, नाम स्थान या इंटरफ़ेस नहीं हो सकता है।
Public Const GLOBAL_CONSTANT As String = "Project Version #1.000.000.001"
Private Const MODULE_CONSTANT As String = "Something relevant to this Module"
Public Sub ExampleDeclaration()
Const SOME_CONSTANT As String = "Hello World"
Const PI As Double = 3.141592653
End Sub
जबकि इसे लगातार प्रकार निर्दिष्ट करने के लिए अच्छा अभ्यास माना जा सकता है, इसकी सख्त आवश्यकता नहीं है। प्रकार निर्दिष्ट नहीं करने के बाद भी सही प्रकार का परिणाम होगा:
Public Const GLOBAL_CONSTANT = "Project Version #1.000.000.001" 'Still a string
Public Sub ExampleDeclaration()
Const SOME_CONSTANT = "Hello World" 'Still a string
Const DERIVED_CONSTANT = SOME_CONSTANT 'DERIVED_CONSTANT is also a string
Const VAR_CONSTANT As Variant = SOME_CONSTANT 'VAR_CONSTANT is Variant/String
Const PI = 3.141592653 'Still a double
Const DERIVED_PI = PI 'DERIVED_PI is also a double
Const VAR_PI As Variant = PI 'VAR_PI is Variant/Double
End Sub
ध्यान दें कि यह कॉन्स्टेंट के लिए विशिष्ट है और चर के विपरीत जहां वेरिएंट प्रकार में परिणाम को निर्दिष्ट नहीं करता है।
हालांकि यह स्पष्ट रूप से एक स्ट्रिंग के रूप में एक निरंतर घोषित करने के लिए संभव है, यह तय-चौड़ाई स्ट्रिंग सिंटैक्स का उपयोग करके एक स्ट्रिंग के रूप में एक निरंतर घोषित करना संभव नहीं है
'This is a valid 5 character string constant
Const FOO As String = "ABCDE"
'This is not valid syntax for a 5 character string constant
Const FOO As String * 5 = "ABCDE"
एक्सेस मॉडिफायर
Dim
कथन को स्थानीय चरों के लिए आरक्षित किया जाना चाहिए। मॉड्यूल-स्तर पर, स्पष्ट पहुंच संशोधक पसंद करें:
-
Private
क्षेत्रों के लिए निजी, जिसे केवल उनके द्वारा घोषित मॉड्यूल के भीतर पहुँचा जा सकता है। -
Public
सार्वजनिक क्षेत्रों और वैश्विक चर, जो किसी भी बुला कोड द्वारा पहुँचा जा सकता है। - परियोजना के भीतर सार्वजनिक चर के लिए
Friend
, लेकिन अन्य संदर्भित VBA परियोजनाओं के लिए दुर्गम (ऐड-इन्स के लिए प्रासंगिक) -
Global
उपयोगPublic
क्षेत्रों के लिए मानक मॉड्यूल में भी किया जा सकता है, लेकिन क्लास मॉड्यूल में अवैध है और वैसे भी अप्रचलित है - इसके बजायPublic
संशोधक को प्राथमिकता दें। यह संशोधक या तो प्रक्रियाओं के लिए कानूनी नहीं है।
प्रवेश संशोधक चर और प्रक्रियाओं के लिए समान रूप से लागू होते हैं।
Private ModuleVariable As String
Public GlobalVariable As String
Private Sub ModuleProcedure()
ModuleVariable = "This can only be done from within the same Module"
End Sub
Public Sub GlobalProcedure()
GlobalVariable = "This can be done from any Module within this Project"
End Sub
विकल्प निजी मॉड्यूल
मानक मॉड्यूल में सार्वजनिक पैरामीटर रहित Sub
प्रक्रिया मैक्रोज़ के रूप में उजागर की जाती है और मेजबान दस्तावेज़ में नियंत्रण और कीबोर्ड शॉर्टकट से जुड़ी जा सकती है।
इसके विपरीत, मानक मॉड्यूल में सार्वजनिक Function
प्रक्रियाओं को होस्ट अनुप्रयोग में उपयोगकर्ता-परिभाषित फ़ंक्शन (यूडीएफ) के रूप में उजागर किया जाता है।
मानक मॉड्यूल के शीर्ष पर Option Private Module
निर्दिष्ट करना अपने सदस्यों को मैक्रोज़ और यूडीएफ के मेजबान एप्लिकेशन के रूप में उजागर होने से रोकता है।
संकेत टाइप करें
टाइप संकेत बहुत हतोत्साहित हैं। वे मौजूद हैं और ऐतिहासिक और पिछड़े-अनुकूल कारणों के लिए यहां प्रलेखित हैं। आपको इसके बजाय As [DataType]
सिंटैक्स का उपयोग करना चाहिए।
Public Sub ExampleDeclaration()
Dim someInteger% '% Equivalent to "As Integer"
Dim someLong& '& Equivalent to "As Long"
Dim someDecimal@ '@ Equivalent to "As Currency"
Dim someSingle! '! Equivalent to "As Single"
Dim someDouble# '# Equivalent to "As Double"
Dim someString$ '$ Equivalent to "As String"
Dim someLongLong^ '^ Equivalent to "As LongLong" in 64-bit VBA hosts
End Sub
संकेत संकेत कोड पठनीयता को काफी कम करते हैं और एक विरासत को प्रोत्साहित करते हैं हंगेरियन नोटेशन जो पठनीयता में भी बाधा उत्पन्न करता है:
Dim strFile$
Dim iFile%
इसके बजाय, चर को उनके उपयोग के करीब घोषित करें और उनके उपयोग के लिए चीजों का नाम दें, उनके प्रकार के बाद नहीं:
Dim path As String
Dim handle As Integer
विशिष्ट प्रकार को लागू करने के लिए, प्रकार के संकेत भी शाब्दिक रूप से उपयोग किए जा सकते हैं। डिफ़ॉल्ट रूप से, 32,768 से छोटे एक संख्यात्मक शाब्दिक की व्याख्या एक Integer
शाब्दिक के रूप में की जाएगी, लेकिन एक प्रकार के संकेत से आप इसे नियंत्रित कर सकते हैं:
Dim foo 'implicit Variant
foo = 42& ' foo is now a Long
foo = 42# ' foo is now a Double
Debug.Print TypeName(42!) ' prints "Single"
टाइप संकेत आमतौर पर शाब्दिक रूप से आवश्यक नहीं होते हैं, क्योंकि उन्हें एक स्पष्ट प्रकार के साथ घोषित चर को सौंपा जाएगा, या जब पैरामीटर के रूप में पारित किया जाता है, तो उन्हें उपयुक्त प्रकार में बदल दिया जाता है। स्पष्ट रूपांतरण रूपांतरणों में से एक का उपयोग करके अवैध रूपांतरणों से बचा जा सकता है:
'Calls procedure DoSomething and passes a literal 42 as a Long using a type hint
DoSomething 42&
'Calls procedure DoSomething and passes a literal 42 explicitly converted to a Long
DoSomething CLng(42)
स्ट्रिंग-रिटर्निंग बिल्ट-इन फ़ंक्शन
स्ट्रिंग्स को हैंडल करने वाले अधिकांश अंतर्निहित कार्य दो संस्करणों में आते हैं: एक शिष्ट रूप से टाइप किया गया संस्करण जो एक Variant
लौटाता है, और एक ज़ोरदार टाइप किया गया संस्करण ( $
साथ समाप्त होता है) जो एक String
लौटाता है। जब तक आप किसी Variant
को रिटर्न वैल्यू नहीं दे रहे हैं, आपको String
वापस करने वाले संस्करण को प्राथमिकता देनी चाहिए - अन्यथा रिटर्न वैल्यू का निहित रूपांतरण है।
Debug.Print Left(foo, 2) 'Left returns a Variant
Debug.Print Left$(foo, 2) 'Left$ returns a String
ये कार्य हैं:
- VBA.Conversion.Error -> VBA.Conversion.Error $
- VBA.Conversion.Hex -> VBA.Conversion.Hex $
- VBA.Conversion.Oct -> VBA.Conversion.Oct $
- VBA.Conversion.Str -> VBA.Conversion.Str $
- VBA.FileSystem.CurDir -> VBA.FileSystem.CurDir $
- VBA। [_ HiddenModule] .Input -> VBA। [_ HiddenModule] .Input $
- VBA। [_ HiddenModule] .InputB -> VBA। [_ HiddenModule] .InputB $
- VBA.Interaction.Command -> VBA.Interaction.Command $
- VBA.Interaction.Environ -> VBA.Interaction.Environ $
- VBA.Strings.Chr -> VBA.Strings.Chr $
- VBA.Strings.ChrB -> VBA.Strings.ChrB $
- VBA.Strings.ChrW -> VBA.Strings.ChrW $
- VBA.Strings.Format -> VBA.Strings.Format $
- VBA.Strings.LCase -> VBA.Strings.LCase $
- VBA.Strings.Left -> VBA.Strings.Left $
- VBA.Strings.LeftB -> VBA.Strings.LeftB $
- VBA.Strings.LTtrim -> VBA.Strings.LTrim $
- VBA.Strings.Mid -> VBA.Strings.Mid $
- VBA.Strings.MidB -> VBA.Strings.MidB $
- VBA.Strings.Right -> VBA.Strings.Right $
- VBA.Strings.RightB -> VBA.Strings.RightB $
- VBA.Strings.RTrim -> VBA.Strings.RTrim $
- VBA.Strings.Space -> VBA.Strings.Space $
- VBA.Strings.Str -> VBA.Strings.Str $
- VBA.Strings.String -> VBA.Strings.String $
- VBA.Strings.Trim -> VBA.Strings.Trim $
- VBA.Strings.UCase -> VBA.Strings.UCase $
ध्यान दें कि ये फ़ंक्शन उपनाम हैं , न कि काफी प्रकार के संकेत । Left
फ़ंक्शन छिपे हुए B_Var_Left
फ़ंक्शन से मेल B_Var_Left
है, जबकि Left$
संस्करण छिपे हुए B_Str_Left
फ़ंक्शन से मेल B_Str_Left
है।
VBA के बहुत शुरुआती संस्करणों में $
साइन की अनुमति नहीं है और फ़ंक्शन नाम को वर्ग कोष्ठक में संलग्न किया जाना था। वर्ड बेसिक में, कई और अधिक कार्य थे, जो कि $ में समाप्त होने वाले तार लौटाते थे।
फिक्स्ड-लेंथ स्ट्रिंग्स की घोषणा
VBA में, स्ट्रिंग्स को एक विशिष्ट लंबाई के साथ घोषित किया जा सकता है; घोषित रूप से उस लंबाई को बनाए रखने के लिए उन्हें स्वचालित रूप से गद्देदार या काट दिया जाता है।
Public Sub TwoTypesOfStrings()
Dim FixedLengthString As String * 5 ' declares a string of 5 characters
Dim NormalString As String
Debug.Print FixedLengthString ' Prints " "
Debug.Print NormalString ' Prints ""
FixedLengthString = "123" ' FixedLengthString now equals "123 "
NormalString = "456" ' NormalString now equals "456"
FixedLengthString = "123456" ' FixedLengthString now equals "12345"
NormalString = "456789" ' NormalString now equals "456789"
End Sub
स्टेटिक चर का उपयोग कब करें
स्थानीय रूप से घोषित एक स्टेटिक चर को नष्ट नहीं किया जाता है और उप प्रक्रिया के बाहर निकलने पर अपना मूल्य नहीं खोता है। प्रक्रिया के बाद की कॉल के लिए पुन: आरंभीकरण या असाइनमेंट की आवश्यकता नहीं होती है, हालांकि आप किसी भी याद किए गए मान को 'शून्य' करना चाहते हैं।
ये विशेष रूप से तब उपयोगी होते हैं जब किसी वस्तु को 'हेल्पर' उप में बाँधते हैं जिसे बार-बार कहा जाता है।
स्निपेट 1: कई वर्कशीट में स्क्रिप्टिंग.बॉडी ऑब्जेक्ट का पुन : उपयोग
Option Explicit
Sub main()
Dim w As Long
For w = 1 To Worksheets.Count
processDictionary ws:=Worksheets(w)
Next w
End Sub
Sub processDictionary(ws As Worksheet)
Dim i As Long, rng As Range
Static dict As Object
If dict Is Nothing Then
'initialize and set the dictionary object
Set dict = CreateObject("Scripting.Dictionary")
dict.CompareMode = vbTextCompare
Else
'remove all pre-existing dictionary entries
' this may or may not be desired if a single dictionary of entries
' from all worksheets is preferred
dict.RemoveAll
End If
With ws
'work with a fresh dictionary object for each worksheet
' without constructing/destructing a new object each time
' or do not clear the dictionary upon subsequent uses and
' build a dictionary containing entries from all worksheets
End With
End Sub
स्निपेट 2: एक वर्कशीट यूडीएफ बनाएं जो देर से VBScript.RegExp ऑब्जेक्ट को बांधता है
Option Explicit
Function numbersOnly(str As String, _
Optional delim As String = ", ")
Dim n As Long, nums() As Variant
Static rgx As Object, cmat As Object
'with rgx as static, it only has to be created once
'this is beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
Else
Set cmat = Nothing
End If
With rgx
.Global = True
.MultiLine = True
.Pattern = "[0-9]{1,999}"
If .Test(str) Then
Set cmat = .Execute(str)
'resize the nums array to accept the matches
ReDim nums(cmat.Count - 1)
'populate the nums array with the matches
For n = LBound(nums) To UBound(nums)
nums(n) = cmat.Item(n)
Next n
'convert the nums array to a delimited string
numbersOnly = Join(nums, delim)
Else
numbersOnly = vbNullString
End If
End With
End Function
आधा मिलियन पंक्तियों के माध्यम से भरा स्थैतिक वस्तु के साथ यूडीएफ का उदाहरण
* UDF के साथ 500K पंक्तियों को भरने का समय: - ऑब्जेक्ट के रूप में मंद आरजीएक्स के साथ: 148.74 सेकंड - ऑब्जेक्ट के रूप में स्टेटिक आरजीएक्स के साथ: 26.07 सेकंड * ये केवल सापेक्ष तुलना के लिए विचार किया जाना चाहिए। जटिलता के अनुसार आपके अपने परिणाम अलग-अलग होंगे
संचालन की गुंजाइश।
याद रखें कि यूडीएफ की गणना कार्यपुस्तिका के जीवनकाल में एक बार नहीं की जाती है। यहां तक कि एक गैर-वाष्पशील यूडीएफ भी पुनर्गणना करेगा जब तक कि सीमा (एस) के भीतर के मूल्यों को बदल दिया जाए। प्रत्येक बाद की पुनर्गणना घटना केवल वैधानिक रूप से घोषित चर के लाभों को बढ़ाती है।
- मॉड्यूल के जीवनकाल के लिए एक स्टैटिक वैरिएबल उपलब्ध है, न कि वह प्रक्रिया या कार्य जिसमें इसे घोषित किया गया था और सौंपा गया था।
- स्थैतिक चर केवल स्थानीय रूप से घोषित किए जा सकते हैं।
- स्टेटिक चर एक निजी मॉड्यूल स्तर चर के समान गुणों में से कई को धारण करते हैं लेकिन अधिक सीमित दायरे के साथ।
संबंधित संदर्भ: स्टेटिक (विजुअल बेसिक)