Buondì a tutti,
ho un file excel (il problema è presente in tutte le versioni.. 2003, 2007, 2010, 2013 e in tutti i sistemi operativi)
In questo file excel ho una lista di nomi (circa 7000)
Da questa lista con un codice VBA per ogni cella ne leggo il contenuto e tramite ad esso scarico una immagine (100x75) all'interno della cella adiacente.
Il programma rolla alla velocità della luce per le prime 100 celle poi rallenta drasticamente (più va avanti e più rallenta)
Per capire, le prime 2500 le carica in circa 10 minuti le restanti in altri 60..
Aggiornamento a parte che per ora trascuro perchè comunque riesco a concludere il ciclo ho un problema quando un utente apre il file.
All'apertura del file se utilizzo win7 office 2013 il file si blocca e va in calcolo di non so cosa.. dopo 20 minuti si sblocca e va tutto alla perfezione..
Aprendo il file su server win 2008 con office 2010 stessa cosa ma il file si apre in circa 3 minuti (penso sia dovuto dalla potenza che nel server è nettamente superiore al pc locale, si parla di uno xeon con 4 cuori da 2.4ghz)
La mia domanda è dunque questa:
Perchè excel ricalcola tutte le immagini all'apertura se le ho già caricate durante l'aggiornamento?
Domanda 2:
Perchè con l'incrementare degli inserimenti excel rallenta sempre di più?
Vi riporta la routine vba che utilizzo:
Sub CaricaFoto()
Dim i As Variant
Dim foglio As String
Dim origine As String
Dim colonna As Integer
'Rif inserimento foto
On Error GoTo PictureNotAvailable
Application.DisplayAlerts = False
foglio = "Elenco_modelli_Date"
'Mi sposto sul foglio in cui voglio caricare le foto
Sheets(foglio).Select
origine = "I8:I" & ActiveSheet.Range("A6").Value + 7
colonna = 1
' Ciclo tutte le foto del foglio e le cancello
For Each i In Sheets(foglio).Shapes
If Left(i.Name, 7) = "Picture" Then i.Delete
Next i
' Ciclo tutte le celle e cancello gli NA (ATTENZIONE se la routine viene applicata in una pivot commentare le successive 3 righe)
For Each i In Sheets(foglio).Range(origine)
ActiveSheet.Cells(i.Row, colonna).Value = ""
Next i
' Carico la foto e la ridimensiono con la grandezza della cella
For Each i In Sheets(foglio).Range(origine)
'Se il modello ha uno spazio lo cambio con un underscore
nomefile = Replace(Trim(i.Value), " ", "%20")
'Seleziono la cella
ActiveSheet.Cells(i.Row, colonna).Select
'Decido dove mettere la foto
var_Width = Sheets(foglio).Columns(colonna).ColumnWidth
var_Height = Sheets(foglio).Cells(i.Row, colonna).Height
'Carico la foto
ActiveSheet.Pictures.Insert("http://xxxxxxx/xxxx/xxxx/xxx/jpg?style=" & nomefile).Select
'Ridimensione la foto
var_Width = Sheets(foglio).Columns(colonna).ColumnWidth
var_Height = Sheets(foglio).Cells(i.Row, colonna).Height
Selection.Width = var_Width
Selection.Height = var_Height
'Aggiungo Hyperlink alla foto
Sheets(foglio).Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:="http://xxxxxxx/xxxx/xxxx/xxx/jpg?style=" & nomefile
Next i
'Formatto le foto affinchè funzionino con i filtri di tabella
For Each s In ActiveSheet.Shapes
If Left(s.Name, 7) = "Picture" Then s.Placement = xlMoveAndSize
Next s
'Posiziono il cursore in testa al foglio
ActiveSheet.Range("a1").Select
Exit Sub
PictureNotAvailable:
ActiveSheet.Cells(i.Row, colonna).Value = "N.A."
Resume Next
End Sub