views:

754

answers:

4

This declaration causes an overflow in VBA:

Const OVERFLOWS As Long = 10 * 60 * 60

whereas setting the value directly is fine:

Const COMPILES_OK As Long = 36000

How do you persuade VBA to treat literal integers as longs?

Thanks

+5  A: 

Add the long suffix & to at least one number:

Const OVERFLOWS As Long = 10& * 60 * 60

Note that using the CLNG function to convert the values to long will not work, because VBA does not allow assigning the return value of a function to a constant.

xsl
Thanks. I've never had to use that before today. You live and learn..
Jonathan Webb
Hmm, this is something new I have learnt
Varun Mahajan
The reason for the problem is that the default number type in Access is Integer. I believe that type declaration characters are less used, and Clng etc, as suggested by dbb is to be preferred.
Remou
+3  A: 

The type character can also be appended to literals : Const OVERFLOWS As Long = (10& * 60 * 60) (one is suffucient actually because of the way the VBA engine evaluates the expression).

+4  A: 

http://support.microsoft.com/kb/191713 is a nice summary of the type declaration characters available in VBA / VB4-6.

+2  A: 

For those who find the & symbol a bit esoteric, an alternative is to use the CLNG function which converts a number to long

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

you could then do a similar thing for a Single constant

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