Tableau de Gamme en VBA Excel
Eh bien, j'ai eu du mal avec le peu de code et ne peuvent pas sembler obtenir autour d'elle ...
J'essaie de faire un tableau à partir d'une plage de cellules, le tableau est cependant montrant jusqu'à 1 élément de large.
Eh bien, voici le code:
Dim item As Variant
MsgBox Range("D19:H19").Count
item = Range("D19:H19").Value
MsgBox LBound(item) & " " & UBound(item)
selon ma compréhension de l'élément doit contenir un tableau 2D... cependant j'obtiens le résultat suivant
1er MsgBox imprime 5
2ème MsgBox imprime 1 1
Ce qui va mal?
Je ne suis pas un expert vba, mais en prenant la valeur d'une plage (ou un tableau) me semble bizarre. Est-il retourner la première valeur de la gamme?
Généralement VBA serait de retour d'un tableau 2D avec des valeurs de ligne en cours de la 1ère dimension et de la colonne des valeurs de la 2ème dimension , mais ici je suis à la recherche d'une plage qui a 5 cellules en une seule rangée, donc je ne suis pas tout à fait sûr de savoir si un 1d ou 2d tableau sera retourné...
et oui son retour uniquement la première valeur de la plage... des idées pourquoi c'est faire?!
Il ne fait pas de retour de la première valeur de la plage. Sélectionnez un 2D-plage de cellules et appuyez sur
Généralement VBA serait de retour d'un tableau 2D avec des valeurs de ligne en cours de la 1ère dimension et de la colonne des valeurs de la 2ème dimension , mais ici je suis à la recherche d'une plage qui a 5 cellules en une seule rangée, donc je ne suis pas tout à fait sûr de savoir si un 1d ou 2d tableau sera retourné...
et oui son retour uniquement la première valeur de la plage... des idées pourquoi c'est faire?!
Il ne fait pas de retour de la première valeur de la plage. Sélectionnez un 2D-plage de cellules et appuyez sur
Tab
plusieurs fois. Vous verrez une cellule sélectionnée est mise en surbrillance. C'est la cellule Value
renvoie le contenu de.
OriginalL'auteur Kevin Boyd | 2009-10-10
Vous devez vous connecter pour publier un commentaire.
Le problème est dans LBound et UBound
jtolle a raison au sujet de la LBound et UBound.
Toutefois, l'article ne doit pas être grisé comme un tableau (vous recevrez un message d'erreur).
Je pense que c'est ce que vous voulez
Fonctionne comme un charme! Je ne comprenais pas encore ce que je faisais mal, je ne semble pas comprendre la gamme des concepts en VBA..
OriginalL'auteur
Votre article doit contenir un tableau 2d comme prévu. Si vous vous en tenez à un point d'arrêt dans votre code et regardez la petite "Habitants" de la fenêtre de l'éditeur VBA, vous devriez voir ça. Vos appels vers LBound et UBound obtenez les limites dans la première dimension. Si vous appelez Lbound(item 2) et UBound(élément 2), vous devriez obtenir 1 et 5 que vous attendez.
EDIT:
C'est, une fois que vous avez fait de la cession, point de ressembler à quelque chose, vous pourriez avoir déclaré en tant que tel:
Dim élément(1 à 1, 1 à 5)
L'un des fléaux de la programmation VBA, c'est que les tableaux peuvent avoir des limites inférieures. Ainsi, toute votre code doit être conscient de cela.
OriginalL'auteur jtolle
C'est correct. Même si vous sélectionnez un tableau de cellules, vous avez toujours la possibilité de sélectionner une seule cellule de la matrice (et étape par exemple avec onglet à travers les éléments de ce tableau)
seulement vous obtient le contenu de la actuellement qu'une seule cellule sélectionnée.
si vous souhaitez que l'énumération de la matrice, vous pouvez appeler le
.Cells()
-méthode de laRange
-objetEn supposant que la D19 jusqu'à H19 contenir de "a" à "e", respectivement, en appelant
vous renvoie
"b"
. Notez que c'est un tableau de base et peut être en 2 dimensions.Cells()
prend pas plus de 2 paramètres pour spécifier l'intérieur de décalage à partir de la sélection de l'origine.espère que précise... ce qui concerne
Eh bien j'ai testé cela sur Excel 2k3. Peut-être, cela est dû au fait que la Valeur pourrait être en 2 dimensions...
lbound
prend un deuxième paramètre qui exprime que ce que nous appelons la dimension. Je ne suis pas sûr quel est le paramètre qui correspond à la valeur. Ce n'VarType(Range("D19:H19").Value)
retour? Il devrait êtrevbArray
... Vous pouvez essayer deUbound(item,1)
au lieu deUbound(1)
et bien j'ai essayé Ubound(élément 1), mais en vain.. j'ai toujours l'1 1 à partir de la 2ème MsgBox sortie.. Et quant à ce (Range("D19:H19").Valeur) doit retourner... je pense que je ne suis pas vraiment sûr..je suis en train de travailler sur des échantillons de code..
hmm étrange, puis... eh bien, l'article fait référence à toutes les versions antérieures à 2007, mais pas 2007. Il est donc possible qu'il fonctionne différemment maintenant. Comment au sujet de la solution .Les cellules(nombre) ? ... Encore un autre point: Essayez de déclarer un élément avec
item()
au lieu deitem
À l'aide de .Les cellules(nombre), je vais avoir à parcourir toutes les cellules de la plage dans une boucle suivante, à droite?... eh bien, si il n'y a pas d'autre choix je ne vais pas à l'esprit d'aller pour cette solution...tant qu'il fonctionne toujours...
OriginalL'auteur Atmocreations
Essayez ceci:
Pour info, la transposition n'est pas disponible dans Excel 2003.
C'est drôle, parce que c'est là où j'ai écrit le code.
OriginalL'auteur JimmyPena
si vous voulez un tableau 1D, à se joindre à elle pour une clause, par exemple, vous devez transposer votre gamme.
J'ai trouvé que vous avez à transposer deux fois pour une même ligne, une seule fois pour une colonne de données comme ceci:
vaut une pièce de théâtre.
OriginalL'auteur Nick