2012-05-30 3 views
0

Je ne trouve aucune documentation à l'appui de mes constatations, mais c'est pourquoi je suis ici. Dans mes modules, je déclare plusieurs tableaux globaux, ce n'est pas un problème en soi, mais ce qui semble se passer est que si je tente de déclarer plusieurs tableaux dans une seule instruction, seule la première est initialisée. Quelqu'un peut-il confirmer que c'est le comportement et/ou me diriger vers la documentation qui soutient cela?Variables globales Excel VBA

Exemple de non déclaration de travail

Global arr1, arr2, arr3 

Quand je vais dans le code si je cherche la définition de Arr1 il se trouve. Si je cherche soit arr2 ou arr3 je reçois un message que "Identifiant sous cusor n'est pas reconnu." Si je déplace arr3 à une nouvelle ligne et le décale comme tel:

Global arr1, arr2 
Global arr3 

Il est maintenant reconnu. Donc je ne sais pas si c'est un comportement connu, un bug, ou autre.

+1

'mondial a, b, c' est très bien, les 3 devraient être définis sans problème, vous aurez besoin pour développer votre exemple. Vous pouvez ajouter 'option explicit' en haut du module; VBA déclenchera une erreur si vous tentez d'utiliser une variable non déclarée/hors champ. (Il est également préférable de définir un type 'global a() comme chaîne, b() comme chaîne ...') –

+1

Dans les deux cas, toutes les variables '' arr1'', '' arr2'' et '' arr3'' si déclaré de cette façon que vous avez spécifié devrait fonctionner. Et tous ceux-là seraient du type '' variant''. Si vous ne déclarez aucun type, toutes les variables deviennent par défaut '' TypeOf'' '' variant''. – Cylian

+0

Je peux aussi déclarer des variables comme ci-dessus et voir leurs définitions dans le code suivant dans le même et d'autres modules. Je seconde la recommandation de @AlexK. utiliser Option Explicit. Une chose à propos des variables globales est qu'elles ne peuvent pas être déclarées dans une classe - elles ne compileront pas (mais ce n'est clairement pas votre problème). –

Répondre

0

Cela fonctionne

Global arr1, arr2, arr3 

Sub test() 

    Debug.Print CLng(arr1) 
    Debug.Print CLng(arr2) 
    Debug.Print CLng(arr3) 

End Sub 

Comme il imprime trois zéros. Vous dites "si je cherche la définition de" mais je ne suis pas sûr de ce que cela signifie. Si je mets un point d'arrêt dans le code et que je survole les variables, elles retournent toutes "Vide".

0

Je ne suis pas sûr de l'utilisation de "Global" au lieu de "Public". Je ne pense pas que le premier est réellement documenté. Mais de toute façon, arrX sont tous de type variante. ils ne sont pas des tableaux spécifiquement, jusqu'à ce qu'ils soient contraints. Comme mentionné dans un commentaire précédent, les tableaux peuvent être déclarés comme ceci: Dim arr1() comme myType Dim arr2 (1 à 10) myType

quelque part dans le code que vous devez également initialiser la structure de arr1 Redim arr1 (i à j)

C'est beaucoup plus sûr et plus efficace que de se débrouiller avec des variantes. Les variantes peuvent être efficaces pour lire et écrire des blocs de données, mais il est préférable de les convertir en tableaux si vous voulez beaucoup travailler avec eux.

Voici quelques références, en dehors de MSDN:

http://www.cpearson.com/excel/topic.aspx

http://fastexcel.wordpress.com/2011/05/25/writing-efficient-vba-udfs-part-1/