2008-11-04 8 views
10

Questa dichiarazione provoca un overflow in VBA:Overflow nel calcolo di un const in VBA

Const OVERFLOWS As Long = 10 * 60 * 60 

mentre impostando direttamente il valore va bene:

Const COMPILES_OK As Long = 36000 

Come si fa a convincere VBA per il trattamento di interi letterale Longs?

Grazie

risposta

14

aggiungere il suffisso long& ad almeno un numero:

Const OVERFLOWS As Long = 10& * 60 * 60 

noti che usare la funzione CLNG per convertire i valori da long non funzionerà, perché VBA non consente l'assegnazione del restituisce il valore di una funzione a una costante.

+0

Grazie. Non ho mai dovuto usarlo prima di oggi. Vivi e impari .. –

+0

Hmm, questo è qualcosa di nuovo che ho imparato –

+0

Il motivo del problema è che il tipo di numero predefinito in Access è intero. Credo che i caratteri di dichiarazione di tipo siano meno usati, e Clng ecc., Come suggerito da dbb, è da preferire. – Fionnuala

3

Il carattere tipo può anche essere allegato al letterali: Const overflow As Long = (10 & * 60 * 60) (uno è suffucient effettivamente causa del modo in cui il motore VBA valuta l'espressione).

4

Per coloro che trovano il simbolo & un po 'esoterica, in alternativa è quella di utilizzare la funzione CLNG che converte un numero a lunga

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

si potrebbe poi fare una cosa simile per un costante singolo

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