ciao
ecco il codice incriminato
Codice:
Public Sub Compatta(ByVal numRighe As Long, sht As Worksheet)
'Dichiarazione variabili locali
Dim i, j, l1, l2 As Long
Dim strTemp As String
' Compattazione sheet: ciclo a partire dall'ultima riga fino alla terza:
With sht
For j = 4 To numRighe
i = numRighe - j + 4
' se (la colonna descrizione č uguale a quella della riga precedente) e se(coincidono le celle NID_PI)
If ((.Cells(i, colDescr).Value = .Cells(i - 1, colDescr).Value) And (.Cells(i, colNID).Value = .Cells(i - 1, colNID).Value)) Then
' aggiungo alla cella Scenario della precedente riga ",<cella Scenario della riga attuale>"
' Alfonso: aggiunto controllo superamento massimo numero caratteri nella cella
' solo in caso la somma dei due campi non superi i 32768 caratteri procedo all'accodamento
If (Len(.Cells(i, colScenario).Value) + Len(.Cells(i - 1, colScenario).Value)) < NMAXCAR Then
' Alfonso: utilizzo un buffer e le funzioni MId$ per l'accodamento dei valori "Scenario"
l1 = Len(.Cells(i - 1, colScenario).Value)
l2 = Len(.Cells(i, colScenario).Value)
' allocazione buffer per l'accodamento
strTemp = Space$(l1 + l2 + 1)
' accodamento stringa campo scenario
Mid$(strTemp, 1) = .Cells(i - 1, colScenario).Value
Mid$(strTemp, l1 + 1) = ":"
Mid$(strTemp, l1 + 2) = .Cells(i, colScenario).Value
' aggiornamento valore cella
.Cells(i - 1, colScenario).Value = strTemp
End If
' elimino la riga
Rows(i).Delete
End If
Next j
End With
End Sub
in pratica, per un file .csv da 50000 righe, excel arriva ad allocare anche 200MB...