Débordement lors du calcul d'un const dans VBA
Question
Cette déclaration provoque un débordement dans VBA:
Const OVERFLOWS As Long = 10 * 60 * 60
alors que définir directement la valeur est correct:
Const COMPILES_OK As Long = 36000
Comment persuadez-vous VBA de traiter les entiers littéraux comme des longs?
Merci
La solution
Ajoutez le suffixe long
& amp;
à au moins un chiffre:
Const OVERFLOWS As Long = 10& * 60 * 60
Notez que l'utilisation de la fonction CLNG
pour convertir les valeurs en long
ne fonctionnera pas, car VBA ne permet pas d'affecter la valeur de retour d'une fonction à une constante.
Autres conseils
http://support.microsoft.com/kb/191713 est un bon résumé des caractères de déclaration de type disponibles dans VBA / VB4-6.
Pour ceux qui trouvent le & amp; symbole un bit ésotérique, une alternative consiste à utiliser la fonction CLNG qui convertit un nombre en long
Const OVERFLOWS As Long = CLNG(10) * 60 * 60
vous pouvez alors faire la même chose pour une constante Single
Const OVERFLOWS As Single = CSNG(10) * 60 * 60
Le caractère de type peut également être ajouté aux littéraux: Const OVERFLOWS As Long = (10 & * 60 * 60) (un seul suffit en raison de la façon dont le moteur VBA évalue l'expression).