web-dev-qa-db-fra.com

Déclarer et initialiser un tableau de chaînes dans VBA

Cela devrait fonctionner en fonction d'un autre poste de débordement de pile, mais ce n'est pas le cas:

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

Quelqu'un peut-il me faire savoir ce qui ne va pas?

115
Kairan

Essaye ça:

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

Dans le cas spécifique d'un tableau String, vous pouvez initialiser le tableau à l'aide de Split Function car il retourne un tableau String plutôt qu'un tableau Variant:

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

Cela vous permet d'éviter d'utiliser le type de données Variant et de conserver le type souhaité pour arrWsNames.

124
Aiken

Le problème ici est que la longueur de votre tableau n'est pas définie et cela confond VBA si le tableau est explicitement défini en tant que chaîne. Les variantes, cependant, semblent être en mesure de redimensionner à volonté (car elles accumulent beaucoup de mémoire et les gens les évitent généralement pour diverses raisons).

Le code suivant fonctionne très bien, mais il est un peu manuel comparé à d'autres langages:

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"
20
David Wilson
Dim myStringArray() As String
*code*
redim myStringArray(size_of_your_array)

Ensuite, vous pouvez faire quelque chose de statique comme ceci:

myStringArray = { item_1, item_2, ... }

Ou quelque chose d'itératif comme ceci:

Dim x
For x = 0 To size_of_your_array
    myStringArray(x) = data_source(x).Name
Next x
3
Andrew Slentz
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

exemple:

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

résultat:

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

prendre plaisir

edit: j’ai supprimé la fonctionnalité de suppression de duplicatedtexts et rendu le code plus petit et plus facile à utiliser.

2
matan justme