2010-10-05 11 views
0

J'ai parcouru cette question plusieurs fois, mais je ne trouve pas quelque chose qui fonctionne.
Je veux déclarer un tableau de tableaux (arrArr) de longueur indéterminée. En fait, je travaille avec Excel: si la feuille existe, récupère son tableau et le stocke dans le tableau des tableaux. J'ai déclaré ce arrArr comme celui-ci, et le programme fonctionne essentiellement de cette façon:Comment déclarer un tableau de tableaux?

dim arrArr as Variant 
if sheetIsFound then 
    sheetsFound = sheetsFound + 1 
    arrArr(sheetsFound) = arrayOfTheSheet 
end if 

mais il ne fonctionne pas: debug dit que le tableau est vide. Quel est le problème dans ma (mauvaise) logique?

Merci

+0

Je pense que c'est votre objet Varient qui pose problème. Avez-vous pensé à utiliser des listes plutôt que des tableaux? Et avoir une liste de listes? Ou y a-t-il une raison particulière pour utiliser un tableau de tableaux? – jimplode

+0

Oui, Variante est certainement le problème, mais cela fonctionne: Dim vaTest As Variant; vaTest = Array (Array1, array2). Et j'utilise un tableau de tableaux car il semble être un moyen pratique de comparer les valeurs d'un tableau à chaque tableau de l'arrArr, car je ne peux pas créer de variables comme dans PHP: $ {"array". $ numberOfTheArray} = $ thisArray – Coronier

+1

Vous devez Dim/Redim le Variant comme un tableau avant d'assigner un élément à l'intérieur. La variante acceptera volontiers d'être assignée à un tableau mais comme écrit ci-dessus, le tableau n'aura pas de dimensions (pas d'éléments). – Bob77

Répondre

4

Quand vous dites arrArr dim(), le tableau n'a pas de limites. vous devez le redimander au nombre que vous voulez. Si vous souhaitez conserver des éléments existants, vous avez besoin du mot clé preserve. Vous pouvez ajouter des montres et parcourir le code pour voir ce qui se passe à chaque étape.

Essayez ceci:

Dim arrArr() As Variant 
ReDim arrArr(0) 'make an array with 1 item 
If sheetIsFound Then 
    sheetsFound = sheetsFound + 1 
    ReDim Preserve arrArr(0 To (UBound(a) + 1)) 'add an index to the array 
    arrArr(UBound(a)) = arrayOfTheSheet ' add the array to the new index in arrArr 
End If 

Pour accéder aux tableaux, utilisez la syntaxe arrArr (0), arrArr (1), etc.

Cette page a quelques exemples si vous avez besoin de plus d'aide: http://www.brainbell.com/tutors/Visual_Basic/Arrays.htm

+0

Merci, c'est ce que je cherchais. Et tutoriel très intuitif. – Coronier