Overflow durante il calcolo di una const in VBA
Domanda
Questa dichiarazione provoca un overflow in VBA:
Const OVERFLOWS As Long = 10 * 60 * 60
considerando che l'impostazione del valore direttamente va bene:
Const COMPILES_OK As Long = 36000
Come convinci VBA a trattare numeri interi letterali come long?
Grazie
Soluzione
Aggiungi il suffisso long
& amp;
ad almeno un numero:
Const OVERFLOWS As Long = 10& * 60 * 60
Nota che l'uso della funzione CLNG
per convertire i valori in long
non funzionerà, perché VBA non consente di assegnare il valore restituito di una funzione a una costante.
Altri suggerimenti
http://support.microsoft.com/kb/191713 è un bel riassunto dei caratteri di dichiarazione del tipo disponibili in VBA / VB4-6.
Per coloro che trovano & amp; simbolo un po 'esoterico, un'alternativa è usare la funzione CLNG che converte un numero in lungo
Const OVERFLOWS As Long = CLNG(10) * 60 * 60
potresti quindi fare una cosa simile per una costante singola
Const OVERFLOWS As Single = CSNG(10) * 60 * 60
Il carattere del tipo può anche essere aggiunto ai valori letterali: Const OVERFLOWS As Long = (10 & amp; * 60 * 60) (uno è in realtà sufficiente a causa del modo in cui il motore VBA valuta l'espressione).