2011-05-05 14 views
38

मैं ऐसा करना चाहते हैं, लेकिन यह संकलन नहीं होगा:क्या वीबीए में सार्वजनिक चर घोषित करना और डिफ़ॉल्ट मान असाइन करना संभव है?

Public MyVariable as Integer = 123 

इस को प्राप्त करने का सबसे अच्छा तरीका क्या है?

+0

यह वीबीए कहां चल रहा है? एक्सेल, एक्सेस, वर्ड ... –

+0

@ डंकनहोवे मैं एक सामान्य वीबीए समाधान की उम्मीद कर रहा था। – David

+3

क्या वैश्विक चर अब बुरा नहीं मानते हैं? मैं मई में कुछ हफ्तों के लिए दूर था, इसलिए मुझे कुछ याद आ गया होगा। –

उत्तर

79

नेट हमें खराब कर दिया है में आरंभ कर सकता है :) आपका घोषणा VBA के लिए मान्य नहीं है।

केवल स्थिरांक को एप्लिकेशन लोड पर एक मूल्य दिया जा सकता है। आप उन्हें इतना तरह की घोषणा:

Public Const APOSTROPHE_KEYCODE = 222 

यहाँ मेरी VBA परियोजनाओं में से एक से एक नमूना घोषणा है:

VBA Constant Image

आप कुछ है जहाँ आप एक सार्वजनिक चर घोषित लिए देख रहे हैं और उसके बाद करना चाहते हैं इसके मूल्य को आरंभ करें, आपको वर्कबुक_ ओपन उप बनाने की आवश्यकता है और वहां अपना प्रारंभिक कार्य करें। उदाहरण:

Private Sub Workbook_Open() 
    Dim iAnswer As Integer 

    InitializeListSheetDataColumns_S 
    HideAllMonths_S 

    If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then 
    iAnswer = MsgBox("It appears you have not yet set up this workbook. Would you like to do so now?", vbYesNo) 
    If iAnswer = vbYes Then 
     sheetSetupInfo.Activate 
     sheetSetupInfo.Range("D6").Select 
     Exit Sub 
    End If 
    End If 

    Application.Calculation = xlCalculationAutomatic 
    sheetGeneralInfo.Activate 
    Load frmInfoSheet 
    frmInfoSheet.Show 


End Sub 

सुनिश्चित करें कि आप कार्यपुस्तिका में उप घोषित ही वस्तु बनाओ: enter image description here

+5

+1! – CaBieberach

-1

थोड़ा समय हो गया है, लेकिन मेरा मानना ​​है कि यह हो रहा है:

Public MyVariable as Integer 
MyVariable = 123 
+3

यह संकलित नहीं करता है या तो मुझे डर है। ऐसा लगता है कि यह बहुत लंबा रहा है! – David

+6

विशिष्ट रूप से, 'सार्वजनिक' घोषणा * बाहरी * दिनचर्या ('उप' या 'फंक्शन'), मान असाइनमेंट * के अंदर * होनी चाहिए। – RolandTumble

4

सुनिश्चित करें कि आप जानते हैं, लेकिन अगर इसकी एक निरंतर तो const MyVariable as Integer = 123 अन्यथा भाग्य के अपने बाहर; चर को कहीं और एक प्रारंभिक मूल्य असाइन किया जाना चाहिए।

आप किए जा सकेंगे:

public property get myIntegerThing() as integer 
myIntegerThing= 123 
end property 
एक कक्षा मॉड्यूल में

तो विश्व स्तर पर इसे बनाने के;

public cMyStuff as new MyStuffClass 

तो cMyStuff.myIntegerThing तुरंत उपलब्ध है।

+0

बेहतर मॉड्यूल जोड़ना और इस मॉड्यूल के अंदर इन गुणों को परिभाषित करना होगा। मैं 'ग्लोबल्स' नामक एक मॉड्यूल बनाता हूं और इस मॉड्यूल के अंदर 'प्रॉपर्टी गेट' को परिभाषित करता हूं और यह एक आकर्षण की तरह काम करता है। संपत्ति पूर्णांक PSIStartRow = शीट ("एफओबी मूल्य")। रेंज ("एफ 1")। मूल्य समाप्ति संपत्ति के रूप में PSIStartRow() जाओ संपत्ति स्ट्रिंग PSIStartCell = "बी" और PSIStartRow समाप्ति संपत्ति – Achilles

+0

रूप PSIStartCell() जाओ उपरोक्त टिप्पणी में कोड उलझ गया। मैं इसे नीचे पोस्ट कर दूंगा। आपके उत्तर की बहुत ग्राफिकल/शैक्षिक भावना के लिए – Achilles

1

आप सामान्य घोषणाओं में चर परिभाषित कर सकते हैं और फिर इसे अपने पर्यावरण में आग लगने वाली पहली घटना में शुरू कर सकते हैं।

वैकल्पिक रूप से, आप अपने आप को प्रासंगिक गुणों के साथ एक वर्ग बनाने और उन्हें आरंभ विधि

8

बस आपको एक अलग कोण पेशकश करने के लिए -

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

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

यदि आपको अपने उप-कार्यों के बाहर संग्रहीत करने के लिए एक मूल्य की आवश्यकता है, तो मैं लगातार किसी भी जानकारी के लिए नामित श्रेणियों के साथ एक छिपी वर्कशीट का उपयोग करने की अनुशंसा करता हूं।

-1

यह काफी समय हो गया है, लेकिन यह आप को संतुष्ट कर सकते हैं:

Public MyVariable as Integer: MyVariable = 123 

इसके बाद से आप चर नाम फिर से टाइप थोड़ा बदसूरत है, लेकिन यह एक ही पंक्ति में है।

+1

यह संकलन त्रुटि उत्पन्न करता है: अमान्य बाहरी प्रक्रिया –

1

जैसा ऊपर बताया गया है, वैश्विक सुलभ चर घोषित करने के लिए आप इसे सार्वजनिक कीवर्ड से पहले के कार्यों के बाहर कर सकते हैं।

और, के बाद से दिखावा प्रक्रियाओं के बाहर की अनुमति नहीं है, तो आप, उदाहरण के लिए, एक उप कहा जाता InitGlobals कि आपकी सार्वजनिक चर initializes बना सकते हैं, तो आप सिर्फ इस सबरूटीन अपने बयान की शुरुआत में फोन

यहाँ

Public Coordinates(3) as Double 
Public Heat as double 
Public Weight as double 

Sub InitGlobals() 
    Coordinates(1)=10.5 
    Coordinates(2)=22.54 
    Coordinates(3)=-100.5 
    Heat=25.5 
    Weight=70 
End Sub 

Sub MyWorkSGoesHere() 
    Call InitGlobals 
    'Now you can do your work using your global variables initialized as you wanted them to be. 
End Sub 
1

यह है कि मैं क्या जब मैं प्रारंभ वैश्विक स्थिरांक की आवश्यकता है है: यह का एक उदाहरण है
1. एक मॉड्यूल कहा जाता Globals
2. इस तरह प्रॉपर्टी जोड़ेंमें जोड़ेंमॉड्यूल:

Property Get PSIStartRow() As Integer 
    PSIStartRow = Sheets("FOB Prices").Range("F1").Value 
End Property 
Property Get PSIStartCell() As String 
    PSIStartCell = "B" & PSIStartRow 
End Property 
संबंधित मुद्दे