2008-11-04 11 views
10

Cette déclaration provoque un débordement dans VBA:Overflow lors du calcul d'un const dans VBA

Const OVERFLOWS As Long = 10 * 60 * 60 

alors que le réglage de la valeur est directement bien:

Const COMPILES_OK As Long = 36000 

Comment persuadez-vous VBA pour traiter des entiers littéraux comme longtemps?

Merci

Répondre

14

Ajouter le suffixe long& à au moins un numéro:

Const OVERFLOWS As Long = 10& * 60 * 60 

Notez que l'utilisation de la fonction CLNG pour convertir les valeurs long ne fonctionnera pas, parce que VBA ne permet pas l'attribution de la renvoie la valeur d'une fonction à une constante.

+0

Merci. Je n'ai jamais utilisé ça avant aujourd'hui. Vous vivez et apprenez .. –

+0

Hmm, c'est quelque chose de nouveau que j'ai appris –

+0

La raison du problème est que le type de numéro par défaut dans Access est Integer. Je crois que les caractères de déclaration de type sont moins utilisés, et Clng etc, comme suggéré par dbb doit être préféré. – Fionnuala

3

Le caractère de type peut également être annexé à littéraux: Const Débordements As Long = (10 & * 60 * 60) (on est suffucient en fait à cause de la façon dont le moteur VBA évalue l'expression).

4

Pour ceux qui trouvent le symbole & un peu ésotérique, une alternative est d'utiliser la fonction CLNG qui convertit un nombre à longue

Const OVERFLOWS As Long = CLNG(10) * 60 * 60 

alors vous pouvez faire une chose similaire pour une seule constante

Const OVERFLOWS As Single = CSNG(10) * 60 * 60