Dichiara e inizializza Array di stringhe in VBA

Questo dovrebbe funzionare secondo un altro post di overflow dello stack, ma non lo è:

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

Qualcuno può farmi sapere cosa c’è che non va?

Prova questo:

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

Nel caso specifico di un array di stringhe, è ansible inizializzare l’array utilizzando la funzione di divisione in quanto restituisce un array di stringhe piuttosto che un array Variant:

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

Ciò consente di evitare l’utilizzo del tipo di dati Variant e di conservare il tipo desiderato per arrWsNames.

Il problema qui è che la lunghezza dell’array non è definita e questo confonde VBA se l’array è definito esplicitamente come una stringa. Le varianti, tuttavia, sembrano essere in grado di ridimensionarle a seconda delle necessità (perché hanno un sacco di memoria, e in genere le persone li evitano per un sacco di motivi).

Il seguente codice funziona bene, ma è un po ‘manuale rispetto ad alcune delle altre lingue là fuori:

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

Quindi puoi fare qualcosa di statico come questo:

 myStringArray = { item_1, item_2, ... } 

O qualcosa di iterativo come questo:

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

esempio:

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

risultato:

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

godere

modifica: ho rimosso la funzione di eliminazione dei duplicati e reso il codice più piccolo e più facile da usare.

utilizzando

 Dim myarray As Variant 

funziona ma

 Dim myarray As String 

non è così che mi associo a Variant

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

Sbagliato perché il nome dell’array arrWsNames richiede la parentesi non il tipo String .

Funzionerebbe così:

 Dim arrWsNames() As String = {"value1", "value2"} 

Implicando la matrice ha due elementi in essa, il value1 e value2 questo array è lungo due elementi: IE elementO = "value1" element1 = "value2"

o

 Dim arrWsNames() As String 

funziona bene senza dimensioni implicite, puoi riempirlo con tutti gli elementi che desideri.