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