Declareer en initialiseer stringarray in VBA

Dit zou moeten werken volgens een ander stapeloverloopbericht, maar het is niet:

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

Kan iemand me vertellen wat er mis is?


Antwoord 1, autoriteit 100%

Probeer dit:

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

Antwoord 2, autoriteit 84%

In het specifieke geval van een String-array kunt u de array initialiseren met de Split-functieomdat het een String-array retourneert in plaats van een Variant-array:

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

Hierdoor kunt u het gebruik van het gegevenstype Variant vermijden en het gewenste type voor arrWsNames behouden.


Antwoord 3, autoriteit 13%

Het probleem hier is dat de lengte van je array ongedefinieerd is, en dit verwart VBA als de array expliciet is gedefinieerd als een string. Varianten lijken echter in staat te zijn om het formaat naar behoefte aan te passen (omdat ze veel geheugen in beslag nemen en mensen ze over het algemeen om verschillende redenen vermijden).

De volgende code werkt prima, maar het is een beetje handmatig vergeleken met sommige van de andere talen die er zijn:

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

Antwoord 4, autoriteit 3%

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

Dan kunt u iets statisch doen als volgt:

myStringArray = { item_1, item_2, ... }

of iets iteratief zoals dit:

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

Antwoord 5, Autoriteit 2%

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

Voorbeeld:

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

resultaat:

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

Geniet!

bewerken:
Ik heb de functie DuplicationeTexts verwijderd en maakte de code kleiner en gemakkelijker te gebruiken.


Antwoord 6

een alleen -en-nodig-functie die werkt net als array () maar geeft een treendype. U moet eerst de array als tekenreeks dimmen, zoals hieronder wordt weergegeven:

Sub UseStringArray()
    Dim sample() As String
    sample = StringArray("dog", "cat", "horse")
End Sub
Function StringArray(ParamArray ArgList())
    ReDim tempArray(UBound(ArgList)) As String
    For i = 0 To UBound(ArgList)
        tempArray(i) = ArgList(i)
    Next
    StringArray = tempArray
End Function

Antwoord 7

Gebruik

Dim myarray As Variant

werkt maar

Dim myarray As String

niet dus ik blijf bij Variant

Other episodes