166 votes

Déclarer et initialiser un tableau de chaînes de caractères en VBA

Cela devrait fonctionner selon un autre post de stack overflow mais ce n'est pas le cas :

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

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

210voto

Eldar Agalarov Points 715

Essayez ceci :

' Variant array    
Dim myVariantArray As Variant
myVariantArray = Array("Cat", "Dog", "Rabbit")

' String array
Dim myStringArray() As String
myStringArray = Split("Cat,Dog,Rabbit", ",")

176voto

Aiken Points 1742

Dans le cas spécifique d'un tableau de chaînes de caractères, vous pouvez initialiser le tableau à l'aide de la fonction Fonction de fractionnement car il renvoie un tableau de chaînes de caractères plutôt qu'un tableau de variables :

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

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

32voto

David Wilson Points 1

Le problème est que la longueur de votre tableau n'est pas définie, ce qui perturbe VBA si le tableau est explicitement défini comme une chaîne de caractères. Les variantes, en revanche, semblent pouvoir être redimensionnées en fonction des besoins (parce qu'elles occupent beaucoup de mémoire et que les gens les évitent généralement pour toutes sortes de raisons).

Le code suivant fonctionne parfaitement, mais il est un peu manuel par rapport à d'autres langages existants :

Dim SomeArray(3) As String

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

6voto

Andrew Slentz Points 89
Dim myStringArray() As String
*code*
redim myStringArray(size_of_your_array)

Vous pouvez alors faire quelque chose de statique comme ceci :

myStringArray = { item_1, item_2, ... }

Ou quelque chose d'itératif comme cela :

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

6voto

matan justme Points 117
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"

Bonne lecture !

Editer : J'ai supprimé la fonction de suppression des textes en double et j'ai rendu le code plus petit et plus facile à utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X