Ciclo For particolarmente lungo
Hai un problema con Excel? 
Ciclo For particolarmente lungo
di prestige89 (utente non iscritto) data: 26/04/2014 19:11:48
Sto riscontrando un problema che non mi è mai capitato prima. Ho una serie di 3 cicli annidiati per creare delle percentuali. In tutto vengono analizzate circa un milione e mezzo di celle e create delle percentuali. Questo viene, appunto, gestito con 3 cicli for annidiati. Ora, se eseguo il codice in modalità debud andando step by step funziona tutto alla perfezione. Se però lancio il programma, si blocca nei cicli for e compare la scritta "Non risponde".... c'è un modo per ovviare a questo problema? Non penso sia problemi di RAM, ne vedo ancora qualche GB libero in memoria....
'creo le percentuali su tutti i foglio del nostro file
Sub Percentuali(file As String)
Dim foglio As String
Dim yes As Long
Dim par As Long
Dim err As Long
Workbooks(file).Activate
OCIDELTAminore = 3
OCIQUOTAminore = 79
OCIDELTAmagg = 155
OCIQUOTAmagg = 231
OCIAGGIO = 307
OCIBFAMNT = 383
POSIZIONEy = 132
POSIZIONEp = 197
POSIZIONEerr = 262
Worksheets(foglio).Activate
For i = 1 To 52 'scorro tutti e 52 i fogli
foglio = fasce(i, 1) & " - " & fasce(i, 2) 'creo il nome del foglio che voglia andare ad analizzare
For riga = 3 To 455 'scorro le 455 righe di ogni foglio
For colonna = 2 To 64 'scorro le 62 colonne di ogni foglio
yes = 0
par = 0
err = 0
If Worksheets(foglio).Cells(riga, colonna) = "" Then riga = riga + 3
yes = Worksheets(foglio).Cells(riga, POSIZIONEy + colonna - 2)
par = Worksheets(foglio).Cells(riga, POSIZIONEp + colonna - 2)
err = Worksheets(foglio).Cells(riga, POSIZIONEerr + colonna - 2)
If yes = 0 And par = 0 And err = 0 Then
Worksheets(foglio).Cells(riga, colonna) = "-"
Worksheets(foglio).Cells(riga, colonna + 65) = "-"
Else
Worksheets(foglio).Cells(riga, colonna) = yes / (yes + par + err)
Worksheets(foglio).Cells(riga, colonna + 65) = (yes + par) / (yes + par + err)
End If
Next colonna
Next riga
Next i
End Sub |
di Zer0Kelvin data: 27/04/2014 14:13:26
Ciao.
Ci sono alcune variabili non dichiarate ed un misterioso array Fasce di cui non conosciamo il contenuto.
Intanto prova a modificare così il codice e vediamo che succede.
Spero che tu non abbia infilato un "On Error ..." da qualche parte.
Option Explicit
Sub Percentuali(file As String)
Const POSIZIONEy = 132
Const POSIZIONEp = 197
Const POSIZIONEerr = 262
Dim foglio As String
Dim yes As Long, par As Long, err As Long
Dim i As Long, riga As Long, colonna As Long
For i = 1 To 52 'scorro tutti e 52 i fogli
foglio = fasce(i, 1) & " - " & fasce(i, 2) 'creo il nome del foglio che voglia andare ad analizzare
With Workbooks(file).Sheets(foglio)
For riga = 3 To 455 'scorro le 455 righe di ogni foglio
For colonna = 2 To 64 'scorro le 62 colonne di ogni foglio
If .Cells(riga, colonna) = "" Then riga = riga + 3
yes = .Cells(riga, POSIZIONEy + colonna - 2)
par = .Cells(riga, POSIZIONEp + colonna - 2)
err = .Cells(riga, POSIZIONEerr + colonna - 2)
If yes = 0 And par = 0 And err = 0 Then
.Cells(riga, colonna) = "-"
.Cells(riga, colonna + 65) = "-"
Else
.Cells(riga, colonna) = yes / (yes + par + err)
.Cells(riga, colonna + 65) = (yes + par) / (yes + par + err)
End If
Next colonna
Next riga
End With
Next i
End Sub
|
di prestige89 (utente non iscritto) data: 27/04/2014 16:21:20
FUNZIONA! Non so come tu abbia fatto, ma grazie davvero. Ti offrirei pure un caffè... ma qui sul forum mi risulta parecchio difficile! =)
Cmq, per chiarire, array Fasce è un array dichiarato come (1 to 52, 1 to 2) ed è Public, perchè mi serve richiamarlo in altre funzioni, e (colpa mia che non le ho riportate), quelle non dichiarate erano tutte Public. Quello che non avevo dichiarato erano le "i", "riga" e "colonna", cosa che tu hai saggiamente corretto invece. E no, non avevo messo alcun "On error" nel codice.
Grazie davvero =)
di Zer0Kelvin data: 27/04/2014 17:57:49
Beh, a caval donato non si guarda in bocca e tutto è bene ciò che finisce bene!
Vuoi Approfondire?