Pourquoi est-VBA en disant qu'il a trouvé un "nom ambigu'?
Lors de la compilation du code (déclarations illustré ci-dessous), je reçois le message d'erreur " Erreur de Compilation: nom Ambigu détecté. SixTables'. J'ai regardé ici et ailleurs, mais ne peut pas trouver quelque chose qui correspond à mon problème. Ce qui semble être les causes les plus fréquentes de cette erreur, de déclarer deux variables avec des noms identiques ou de donner le même nom à une fonction et les sous qu'il est appelé à partir, ne s'appliquent pas. Et oui, je sais que je pourrais juste changer le nom de quelque chose que le système a été heureux avec, mais (1) je ne voudrais pas savoir ce que je fais mal, et (2) j'ai choisi ce nom pour une raison - il s'adapte à son but exactement 🙂
Option Explicit
Dim ArmOfService As Byte
Dim CharacterNumber As Long
Dim CurrentTerm As Byte
Dim DecorationRollMade As Byte
Dim DecorationRollNeeded As Byte
Dim DiceSize As Byte
Dim GenAssignment
Dim GenAssignmentSwitchInt As Byte
Dim GenAssignmentSwitchOff As Byte
Dim iLoopControl
Dim jLoopControl
Dim kLoopControl
Dim LineIncrement As Integer
Dim lLoopControl
Dim Merc(100)
Dim NoOfDice As Byte
Dim OfficerPromotion(63 To 78) As Byte
Dim PromotionRollMade As Byte
Dim PromotionRollNeeded As Byte
Dim Roll As Byte
Dim SkillColumn
Dim SixTables
Dim SpecAssignmentSwitchEnd As Byte
Dim SurvivalRollMade As Byte
Dim SurvivalRollNeeded As Byte
Dim TechLevel As Byte
Dim Temp As Integer
Dim Term As Byte
Dim TestCount
Dim UnitAssignment
Dim WhichTable
Dim Year As Byte
EDIT: je suis tellement gênée que j'ai du mal à me l'expliquer quel était le problème. Je savais que je n'avais pas dupliquer un nom, depuis que j'ai été en utilisant uniquement une fois qu'une fonction! Merci à tous pour votre aide, je vais maintenant aller se cacher mon visage dans la honte...
- Je suppose que le fait de changer le nom n'résoudre le problème par votre post?
- Avez-vous un module de code de ce nom?
- Kairan. Oui, c'est fait.
- Clairement, à partir du code que vous avez fournis, nous pouvons facilement dire il n'y a pas de problème. Vous avez besoin de fournir plus de code et, éventuellement, toutes les combinaisons ie. les noms de module, sous les noms, les noms de fonction, etc. Analyse par le biais de votre code avec les touches CTRL + F et de recherche pour
SixTables
Vous devez vous connecter pour publier un commentaire.
À partir de MSDN :
même nom.
Avoir eu ce problème plusieurs fois, et ne pas bien comprendre pourquoi, je pense qu'il y a un fait important que j'ai testé, et quelqu'un peut confirmer. Il peut être évident pour les programmeurs professionnels, mais je le place ici pour ceux qui cherchent des réponses sur les discussions, qui ne sont généralement pas des programmeurs professionnels.
Une variable déclarée à l'intérieur d'un sous() n'est pas "déclaré" (mémoire allouée) jusqu'à ce que sub() est exécutée. Et lorsque l'exécution de ce sous() est terminée, la mémoire est libérée. Jusqu'à maintenant, je pensais que les variables Publiques agi de la même façon; disponible à n'importe quel module qui l'a utilisé, --MAIS seulement existantes aussi longtemps que le module où ils ont été déclarés était toujours en cours d'exécution.
Toutefois, pour toute variable Publique qui est de la déclaration de ligne est dans n'importe quel module dans le classeur, cette variable est déclarée et disponible lors de l'exécution de n'importe quel module dans le classeur, même si le module où la déclaration Publique existe, n'est jamais appelé ou exécuté.
Par conséquent, si vous avez un Public déclaration de variable dans un module, puis de nouveau dans un module distinct que vous envisagez d'exécuter indépendante de la première, Excel voit encore 2 déclarations pour la même variable, et il est donc ambigu.
Pour le prouver, vous pouvez créer un module vide à l'intérieur d'un classeur de projet, et n'apportent absolument rien à l'exception de deux déclaration Publique lignes,
Public VariableX comme une Chaîne de caractères
Public VariableY as Integer
et ces variables seront déclarés et disponible tout au long du projet, pour un sous() exécutée. Ce fait est aussi probablement la raison pour laquelle le conseil sur la réduction de l'utilisation de variables publiques.
De nouveau, ce qui peut avoir été la maternelle au niveau de l'information pour les programmeurs professionnels, mais plus sur ce ne sont pas des pros, et ont à apprendre de ces leçons à la dure, ou par le biais de forums de discussion de ce genre. J'espère que cela aide quelqu'un.