वीबीए में घोषणा और प्रारंभिक स्ट्रिंग ऐरे


126

यह एक और स्टैक ओवरफ्लो पोस्ट के अनुसार काम करना चाहिए लेकिन इसके नहीं:

Dim arrWsNames As String() = {"Value1", "Value2"}

क्या कोई मुझे बता सकता है कि क्या गलत है?


33
नोट: घुंघराले ब्रेस सिंटैक्स VBA के अंदर काम नहीं करता है, इसे VB.NET के लिए डिज़ाइन किया गया है। अपनी खुद की पवित्रता के लिए, इन दो वातावरणों को भ्रमित न करें।
बूमर 57

2
यदि आप एक्सेल का उपयोग कर रहे हैं (और आप वेरिएंट ऐरे से संतुष्ट हैं), तो आप उपयोग कर सकते हैंDim x() As Variant: x = [{"Value1", "Value2"}]
ThunderFrame

1
जो कोई भी इस टिप्पणी को देख रहा है, लगभग दो साल बाद (मेरे जैसे)। ऐसा लगता है कि VBA / Excel वाक्यविन्यास को पसंद नहीं करता है Dim x() As Variant: x = [{"Value1", "Value2"}] यदि आप चर का उपयोग कर रहे हैं ... अर्थात यदि v1 = "Value1"; v2 = "Value2", तो x = [{v1, v2}]एक त्रुटि उत्पन्न करेगा, जबकि x = [{"Value1", "Value2"}]नहीं।
चिप आर।

जवाबों:


169

इसे इस्तेमाल करे:

Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")

20
तकनीकी रूप से एक भिन्न सरणी बनाता है, न कि एक स्ट्रिंग सरणी। बेशक वेरिएंट सरणी केवल स्ट्रिंग्स का एक सरणी हो सकती है, लेकिन यह दृष्टिकोण गैर-स्ट्रिंग डेटा प्रकारों को भी अनुमति देगा:myArray = Array("A", "B", 12345, "D"...)
डेविड ज़ेमेंस

10
डिम myStringArray के बारे में क्या () स्ट्रिंग के रूप में ... myStringArray = Array ("कैट", "डॉग", "रैबिट")। भिन्न - yuck!
एंडेज

30
यदि आप इसे एक पंक्ति में रखना चाहते हैं, तो आप घोषणा के बाद बृहदान्त्र का उपयोग कर सकते हैं: Dim arrWsNames() As String: arrWsNames = Split("Value1,Value2", ",") ऊपर टिप्पणी से प्रारंभ करना मेरे लिए काम नहीं करता है, क्योंकि एरे () वेरिएंट का एक सरणी बनाता है और स्ट्रिंग्स नहीं
लेडी शरमको

6
1 के रूप में एक अच्छा जवाब नहीं) यह एक वेरिएंट है जिसमें एक सरणी और 2 है) वेरिएंट
वीबीए

4
@stifin और 3) वीबीए में स्ट्रिंग ऐरिगाइज़र नहीं है। लेकिन आप स्प्लिट का उपयोग उदाहरण के लिए कर सकते हैं।
एल्डारॉलावोव

141

स्ट्रिंग सरणी के विशिष्ट मामले में आप स्प्लिट फ़ंक्शन का उपयोग करके सरणी को आरंभीकृत कर सकते हैं क्योंकि यह वेरिएंट सरणी के बजाय स्ट्रिंग सरणी देता है:

Dim arrWsNames() As String
arrWsNames = Split("Value1,Value2,Value3", ",")

यह आपको वेरिएंट डेटा प्रकार का उपयोग करने से बचने और arrWsNames के लिए वांछित प्रकार को संरक्षित करने की अनुमति देता है।


3
यह निश्चित रूप से अन्य कार्यों क्लीनर के साथ इसे पारित कर देता है; याददाश्त बचाने का जिक्र नहीं ...
जेसन आर। मिक

23

यहां समस्या यह है कि आपके सरणी की लंबाई अपरिभाषित है, और यह VBA को भ्रमित करता है यदि सरणी को स्पष्ट रूप से एक स्ट्रिंग के रूप में परिभाषित किया गया है। हालाँकि, वेरिएंट जरूरत के अनुसार आकार बदलने में सक्षम प्रतीत होता है (क्योंकि वे स्मृति का एक गुच्छा हॉग करते हैं, और लोग आमतौर पर कारणों की एक गुच्छा के लिए उनसे बचते हैं)।

निम्नलिखित कोड ठीक काम करता है, लेकिन यह कुछ अन्य भाषाओं की तुलना में थोड़ा मैनुअल है:

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"

3
Dim myStringArray() As String
*code*
redim myStringArray(size_of_your_array)

तो आप इस तरह से कुछ स्थिर कर सकते हैं:

myStringArray = { item_1, item_2, ... }

या इस तरह कुछ पुनरावृत्ति:

Dim x
For x = 0 To size_of_your_array
    myStringArray(x) = data_source(x).Name
Next x

3
Public Function _
CreateTextArrayFromSourceTexts(ParamArray SourceTexts() As Variant) As String()

    ReDim TargetTextArray(0 To UBound(SourceTexts)) As String

    For SourceTextsCellNumber = 0 To UBound(SourceTexts)
        TargetTextArray(SourceTextsCellNumber) = SourceTexts(SourceTextsCellNumber)
    Next SourceTextsCellNumber

    CreateTextArrayFromSourceTexts = TargetTextArray
End Function

उदाहरण:

Dim TT() As String
TT = CreateTextArrayFromSourceTexts("hi", "bye", "hi", "bcd", "bYe")

परिणाम:

TT(0)="hi"
TT(1)="bye"
TT(2)="hi"
TT(3)="bcd"
TT(4)="bYe"

का आनंद लें

संपादित करें: मैंने डुप्लिकेटेडटैक्स हटाने की सुविधा को हटा दिया और कोड को छोटा और उपयोग करने में आसान बना दिया।


1
इसका उत्तर होना चाहिए - हालाँकि इनिशियलाइज़ करने के लिए कोई तरीका नहीं बनाया गया है, निश्चित रूप से एक ग्लोबल फंक्शन जैसे कि ऐसा करना कोड को पठनीय बनाए रखता है और यह संकेत नहीं देता है कि आपकी परिभाषा एक हैvariant
एंडीज

-7

का उपयोग करते हुए

Dim myarray As Variant

काम करता है लेकिन

Dim myarray As String

इसलिए मैं वेरिएंट के लिए नहीं बैठता


8
ऐसा इसलिए है क्योंकि आपको मायरे के अंत में कोष्ठक जोड़ना चाहिए। कोष्ठक VBA को बताता है कि यह एक सरणी है। एक स्ट्रिंग के रूप में डिमिंग करना इसे स्ट्रिंग-ओनली सरणी बनाता है।
पर्मेनोबाय

आपको सरणी की सीमाओं को घोषित करना होगा। या तो एक गतिशील ऐरे: Dim MyArray() as Stringया एक निश्चित आकार का ऐरे Dim MyArray(1 to 10) as String:।
पैट्रिक लेपलेलेटियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.