Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba excel errore run-time 6 - overflow

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel errore run-time 6 - overflow

Postdi Francesco53 » 26/02/20 15:06

Un saluto a tutti, una macro mi restituisce l'errore in oggetto, pur avendo dichiarato long le variabili, mi potete aiutare a superare l'errore?
Questo è il codice utilizzato:

Codice: Seleziona tutto
Dim r As Long
Dim t As Long
r = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
t = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1

Ringrazio chi può aiutarmi a risolvere l'errore,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 737
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: vba excel errore run-time 6 - overflow

Postdi wallace&gromit » 26/02/20 15:16

Anthony ci dirà perché succede questo, ma non puoi fare tutte quelle moltiplicazioni, così funziona:
Codice: Seleziona tutto
Dim r As Long
Dim t As Long
r = 10 * 9 * 8 * 7 * 6
r = r * 5 * 4 * 3 * 2
t = 9 * 8 * 7 * 6 * 5
t = t * 4 * 3 * 2 * 1
Office2016 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1990
Iscritto il: 16/01/12 14:21

Re: vba excel errore run-time 6 - overflow

Postdi wallace&gromit » 26/02/20 15:20

Oppure, più lungo ma esteticamente più bello:
Codice: Seleziona tutto
r = 1
For i = 10 To 2 Step -1
r = r * i
Next i
Office2016 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1990
Iscritto il: 16/01/12 14:21

Re: vba excel errore run-time 6 - overflow

Postdi Anthony47 » 26/02/20 16:32

L'errore non capita quando si carica il risultato nella variabile, ma mentre il vba fa i calcoli.

In quella fase, vba utilizza un "tipo dati" compatibile con i fattori in uso; essendo il primo fattore pari a 9, viene usato il tipo Integer (contenuto max: 32767), che andra' in overflow su 9*8*7*6*5*4

Per evitare questa strana situazione puoi costringere il vba a usare un tipo dati Long dichiarando il primo fattore come Long; esempio:
Codice: Seleziona tutto
t = 9& * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1    '9&=tipo Long; risultato Ok
t = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1     'risultato Overflow


Per il significato di 9& vedi: https://docs.microsoft.com/it-it/office ... -data-type

Questo spiega anche perche' questo esempio funziona (vedi esempio di W&G)
Codice: Seleziona tutto
r = 10 * 9 * 8 * 7 * 6
r = r * 5 * 4 * 3 * 2


Quanto al modo migliore per fare quel calcolo, premesso che penso sia stato usato solo per esempio, forse potrebbe essere piu' utile:
Codice: Seleziona tutto
r = Application.WorksheetFunction.Fact(10)


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16798
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel errore run-time 6 - overflow

Postdi Francesco53 » 26/02/20 21:34

Ringrazio entrambi per gli esempi e le spiegazioni,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 737
Iscritto il: 20/02/10 18:45


Torna a Applicazioni Office Windows


Topic correlati a "vba excel errore run-time 6 - overflow":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti