खोज…


स्पष्ट और स्पष्ट घोषणा

यदि किसी कोड मॉड्यूल में मॉड्यूल के शीर्ष पर 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 संदर्भ में कोड नहीं हो सकता। VBA Static कीवर्ड का अर्थ है कि बेतहाशा अलग।

अक्सर, एक 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

static_UDF
आधा मिलियन पंक्तियों के माध्यम से भरा स्थैतिक वस्तु के साथ यूडीएफ का उदाहरण

* UDF के साथ 500K पंक्तियों को भरने का समय:
- ऑब्जेक्ट के रूप में मंद आरजीएक्स के साथ: 148.74 सेकंड
- ऑब्जेक्ट के रूप में स्टेटिक आरजीएक्स के साथ: 26.07 सेकंड
* ये केवल सापेक्ष तुलना के लिए विचार किया जाना चाहिए। जटिलता के अनुसार आपके अपने परिणाम अलग-अलग होंगे
संचालन की गुंजाइश।

याद रखें कि यूडीएफ की गणना कार्यपुस्तिका के जीवनकाल में एक बार नहीं की जाती है। यहां तक कि एक गैर-वाष्पशील यूडीएफ भी पुनर्गणना करेगा जब तक कि सीमा (एस) के भीतर के मूल्यों को बदल दिया जाए। प्रत्येक बाद की पुनर्गणना घटना केवल वैधानिक रूप से घोषित चर के लाभों को बढ़ाती है।

  • मॉड्यूल के जीवनकाल के लिए एक स्टैटिक वैरिएबल उपलब्ध है, न कि वह प्रक्रिया या कार्य जिसमें इसे घोषित किया गया था और सौंपा गया था।
  • स्थैतिक चर केवल स्थानीय रूप से घोषित किए जा सकते हैं।
  • स्टेटिक चर एक निजी मॉड्यूल स्तर चर के समान गुणों में से कई को धारण करते हैं लेकिन अधिक सीमित दायरे के साथ।

संबंधित संदर्भ: स्टेटिक (विजुअल बेसिक)



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