Comment déclarer des Variables Globales dans VBA Excel pour être visible à travers le Classeur
J'ai une question à propos de portée mondiale et cachent le problème dans un exemple simple:
Dans un Classeur Excel:
Dans Feuil1 j'ai deux(2) boutons.
La première est intitulée SetMe et est liée à une sous-routine dans la feuille Sheet1 du module:
Feuil1 code:
Option Explicit
Sub setMe()
Global1 = "Hello"
End Sub
Le deuxième est marqué ShowMe et est liée à une sous-routine dans ThisWorkbook du module:
ThisWorkbook code:
Option Explicit
Public Global1 As String
Debug.Print("Hello")
Sub showMe()
Debug.Print (Global1)
End Sub
Cliquant sur SetMe produit un compilateur error: variable not defined
.
Quand j'ai créer un module séparé et déplacer la déclaration de Global1 en elle tout fonctionne.
Donc ma question est:
Tout ce que j'ai lu dit que les variables Globales déclarées dans le haut d'un module, en dehors de tout code doit être visible par tous les modules du projet. Clairement, ce n'est pas le cas.
À moins que ma compréhension de Module n'est pas correct.
Les objets Sheet1
, Sheet2
, ThisWorkbook
,... qui viennent avec un classeur: ne sont-ce pas les modules sont en mesure de déclarer les variables au niveau global?
Ou est le seul endroit où on peut déclarer un mondial, dans un module séparé de type Modules.
Je l'ai supprimé pour éviter toute confusion 🙂 j'ai manqué de Pearson Lien et mal interprété une ligne dans la MSDN lien que j'ai posté. Appris quelque chose de nouveau aujourd'hui 🙂
Avez-vous trouvé toutes les réponses utiles ici? Il est toujours bon de donner de la rétroaction, de sorte que les autres de SORTE que les utilisateurs peuvent voir.
OriginalL'auteur user2978241 | 2014-12-20
Vous devez vous connecter pour publier un commentaire.
Votre question est:
sont pas ces modules sont en mesure de déclarer les variables au niveau global?
Réponse: OUI, ils sont "capables"
Le seul point est que les références à des variables globales dans ThisWorkbook ou une Feuille de module complet (c'est à dire, dénommé
ThisWorkbook.Global1
, par exemple)Les références à des variables globales dans un module standard doivent être pleinement qualifiés uniquement en cas d'ambiguïté (par exemple, si il n'y a plus d'un module standard de la définition d'une variable avec le nom Global1, et vous voulez l'utiliser dans un troisième module).
Par exemple, placez-le dans la feuille Sheet1 code
place dans ThisWorkbook code
et dans un Module Standard code
Tous les trois sous-marins, beau travail.
PS1: Cette réponse est fondée essentiellement sur des informations à partir de ici. C'est bien la peine de lire (à partir de la grande Puce de Pearson).
PS2: Votre ligne
Debug.Print ("Hello")
vous donnera l'erreur de compilationInvalid outside procedure
.PS3: on pourrait (en partie) vérifiez votre code avec Debug -> Compiler le projet vba dans l'éditeur VB. Toutes les erreurs de compilation pop.
PS4: Vérifiez également Mettre Excel-VBA code dans le module ou de la feuille?.
PS5: Vous pourriez ne pas être en mesure de déclarer une variable globale dans, disons, la feuille Sheet1, et de l'utiliser dans le code de autre classeur (lecture http://msdn.microsoft.com/en-us/library/office/gg264241%28v=office.15%29.aspx#sectionSection0; je n'ai pas tester ce point, donc, cette question est encore à être confirmé en tant que tel). Mais tu ne veux pas le faire dans votre exemple, de toute façon.
PS6: Il y a plusieurs cas qui conduisent à l'ambiguïté dans le cas de ne pas pleinement de qualification des variables globales. Vous pouvez bricoler un peu pour les trouver. Ils sont les erreurs de compilation.
Cela a été me rend fou - ajout de
Public thing as New Thing
à un module au lieu de ThisWorkbook résolu tous les "424" les problèmes d'erreur lorsque vous essayez d'accéderthing.something()
OriginalL'auteur sancho.s
Vous pouvez faire ce qui suit pour apprendre et tester le concept:
Ouvrir nouveau Classeur Excel et en VBA Excel droit de l'éditeur-cliquez sur Modules->Insert->Module
Nouvellement ajouté Module1 ajouter la déclaration;
Public Global1 As String
dans la Feuille de calcul Module VBA de la feuille Sheet1(Feuille1) mettre l'extrait de code:
setMe()
puis SousshowMe()
pour tester la visibilité/accessibilité du varGlobal1
Espère que cela aidera.
Vous êtes les bienvenus! Content que cela fonctionne pour vous. Veuillez cocher la réponse accepté si vous êtes satisfait de la solution. Meilleures salutations,
OriginalL'auteur Alexander Bell