Desbordamiento al calcular una constante en VBA
Pregunta
Esta declaración provoca un desbordamiento en VBA:
Const OVERFLOWS As Long = 10 * 60 * 60
mientras que establecer el valor directamente está bien:
Const COMPILES_OK As Long = 36000
¿Cómo persuades a VBA para que trate enteros literales como largos?
Gracias
Solución
Agregue el sufijo long
& amp;
a al menos un número:
Const OVERFLOWS As Long = 10& * 60 * 60
Tenga en cuenta que usar la función CLNG
para convertir los valores a long
no funcionará, porque VBA no permite asignar el valor de retorno de una función a una constante.
Otros consejos
http://support.microsoft.com/kb/191713 es un buen resumen de los caracteres de declaración de tipo disponibles en VBA / VB4-6.
Para aquellos que encuentran el & amp; símbolo un poco esotérico, una alternativa es utilizar la función CLNG que convierte un número a largo
Const OVERFLOWS As Long = CLNG(10) * 60 * 60
entonces podría hacer algo similar para una sola constante
Const OVERFLOWS As Single = CSNG(10) * 60 * 60
El carácter de tipo también se puede agregar a literales: Const OVERFLOWS As Long = (10 & amp; * 60 * 60) (uno es suficiente en realidad debido a la forma en que el motor VBA evalúa la expresión).