Initializing a static variable in VBA with non-default value -


VBA में स्थिर चर पर्याप्त सरल हैं:

  सार्वजनिक उप foo () स्टेटिक मैं के रूप में पूर्णांक i = i + 1 डीबग। प्रिंट I end उप  

आउटपुट (जब कई बार कहा जाता है):

  1 2 3 ...  

समस्या यह है कि, VBA घोषणा के रूप में एक पंक्ति पर एक चर को प्रारंभ करने का समर्थन नहीं करता है (: का उपयोग करके एक पंक्ति दो पंक्तियां रखने की गणना नहीं कर रहा है):

  सार्वजनिक उप foo () Dim I जैसा पूर्णांक = 5 'संकलित नहीं होगा! डीएम जे एस इंटीजर जे = 5 'हमें इसके बजाय एंड सब   

स्थिर चर के साथ यह संघर्ष करना है:

  सार्वजनिक उप foo () स्टेटिक i पूर्णांक के रूप में 'हम यहां एक प्रारंभिक मूल्य नहीं डाल सकते हैं ... I = 5' तो यह है कि हम आम तौर पर इसे आरंभ करते हैं, लेकिन ... i = i + 1 डीबग। प्रिंट I end sub  < / Pre> 

आप संभवतया देख सकते हैं कि क्या होता है - सबसे पहले चीज हर बार foo को बुलाया जाता है, इसे वापस 5 पर सेट किया जाता है। आउटपुट:

  6 6 6 ...  

आप अपने डिफ़ॉल्ट के अलावा किसी अन्य मान के लिए VBA में स्थिर वैरिएबल कैसे आरंभ कर सकते हैं? या यह सिर्फ वीबीए गेंद छोड़ने वाला है?

ऐसा करने का एक तरीका यदि आप स्थिर रखना चाहते हैं सिमेंटिक्स और ग्लोबल पर स्विच नहीं करना डिफ़ॉल्ट मान को सूंघना है और फिर प्रारंभिक स्थिति को सेट करना है:

  स्थिरांक के रूप में स्थिरांक यदि (i = 0) तो मैं = 5   

सुरक्षित वैकल्पिक शायद हो सकता है

  स्थिर I as variant अगर isempty (i) तो मैं = 5  

या

< पूर्व> सार्वजनिक उप foo (बुलियन के रूप में वैकल्पिक init = false) स्टेटिक मैं पूर्णांक के रूप में यदि init तब I = 5 निकास उप endif

आप शायद एक डिफ़ॉल्ट के साथ एक वर्ग बना सकते हैं संपत्ति और class_initialize का उपयोग करें, लेकिन शायद यह थोड़ा अधिक उलझन भरा है।


Comments

Popular posts from this blog

python - Strange behavior using PyQt4's 'pyqtSlot' decorator before another decorator -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

c# - Process.Kill() returns access denied -