KB0204: Alcuni file Excel sono lenti con i collegamenti dati
- Home
- Risorse
- Knowledge base
- KB0204
Problema
Se un file Excel contiene collegamenti dati Excel (vedere Collegamenti dati Excel) e troppi stili di cella, potrebbe iniziare a scorrere molto lentamente ed Excel sembra non rispondere.
Questo problema può verificarsi se il file Excel contiene più di circa 3000 stili di cella. È possibile controllare il numero di stili di cella con il seguente comando VBA nella Immediate Window:
print Activeworkbook.Styles.Count Scopri di più
I passaggi per verificarlo sono descritti in dettaglio:
- Premere Alt+F11 per aprire l'editor VBA.
- Passare alla Immediate Window. Se non è visibile, è possibile visualizzarla facendo clic su View > Immediate Window.
- Digitare il comando seguente e premere Enter
print Activeworkbook.Styles.Count
Soluzione: pulire le cartelle di lavoro interessate
- Copiare i fogli di lavoro in una nuova cartella di lavoro Scopri di più
In Office 2013 e versioni successive, la copia di fogli di lavoro tra cartelle di lavoro impedisce per impostazione predefinita l'accumulo di stili di cella inutilizzati:
- Selezionare tutti i fogli nella cartella di lavoro tenendo premuto SHIFT e facendo clic sul primo e sull'ultimo foglio di lavoro
- Fare clic con il pulsante destro del mouse sulla selezione: Move or copy… > To book: (new book) e selezionare Create a copy > OK
- Salvare la nuova cartella di lavoro con un nuovo nome
- Pulire le cartelle di lavoro con uno strumento di pulizia Scopri di più
Usare lo strumento di pulizia consigliato da Microsoft in KB213904. Usando XLStyles Tool, fare clic su Get Excel File, selezionare Force all cell styles to 'Normal', quindi fare clic su Process File. Quando Excel si apre con il file pulito, salvarlo con un nuovo nome.
- Rimuovere gli stili di cella personalizzati dalla cartella di lavoro usando una macro VBA Scopri di più
Aprire l'editor VBA con Alt+F11. Selezionare la cartella di lavoro e fare clic su Insert > Module. Quindi incollare una delle macro seguenti ed eseguirla premendo F5:
DeleteCustomStyles() rimuove tutti gli stili di cella personalizzati dalla cartella di lavoro.
Sub DeleteCustomStyles() Dim st As Style Dim i, i_cust As Long i_cust = 0 For i = (ActiveWorkbook.Styles.Count) To 1 Step -1 With ActiveWorkbook.Styles(i) If .BuiltIn = False Then On Error Resume Next .Locked = False On Error GoTo 0 If Not .Locked Then .Delete i_cust = i_cust + 1 End If End If End With If (i Mod 100) = 0 Then Debug.Print i Next MsgBox "Stili eliminati: " & i_cust & " stili" & Chr(13) & "Stili rimanenti: " & ActiveWorkbook.Styles.Count End SubRemove_Styles() rimuove dalla cartella di lavoro solo gli stili di cella personalizzati inutilizzati. È simile alla macro precedente, tuttavia l'esecuzione può richiedere molto tempo. La macro è stata fornita dal supporto di Microsoft Office.
Option Explicit Dim st_array() As String Dim i_x As Long Sub Remove_Styles() Dim stname As String Dim ustname As String Dim uc As Range Dim retval As Boolean Dim ust As Style Dim sh As Worksheet i_x = 0 For Each sh In ActiveWorkbook.Worksheets For Each uc In sh.UsedRange stname = uc.Style.Name retval = Check_Array(stname) If retval = False Then ReDim Preserve st_array(i_x) st_array(i_x) = stname i_x = i_x + 1 End If Next uc Next sh For Each ust In ActiveWorkbook.Styles If ust.BuiltIn = False Then ustname = ust.Name retval = Delete_Styles(ustname) On Error Resume Next If retval = True Then ust.Delete On Error GoTo 0 End If Next ust End Sub Function Delete_Styles(stylename As String) As Boolean Delete_Styles = True Dim i_y As Long For i_y = 0 To i_x - 1 If st_array(i_y) = stylename Then Delete_Styles = False Next i_y End Function Function Check_Array(stylename As String) As Boolean Check_Array = False Dim i_y As Long For i_y = 0 To i_x - 1 If st_array(i_y) = stylename Then Check_Array = True Next i_y End Function
La soluzione migliore sarebbe impedire l'incollamento degli stili di cella inutilizzati, ma richiede che Microsoft corregga un bug in Excel 2007 e versioni successive. Finora Microsoft non ha ritenuto l'impatto aziendale abbastanza elevato da fornire questa correzione. Se la società ha un contratto di assistenza Microsoft Office e desidera contattare Microsoft per risolvere un errore, occorre fare riferimento al numero di caso Microsoft 113012810172527.
Spiegazione
Alcune cartelle di lavoro .xlsx contengono un numero elevato (diverse decine di migliaia) di stili di cella a causa di bug e di una progettazione problematica del codice in Excel. Un fattore che contribuisce al problema sono anche gli strumenti di reportistica, che a volte generano inutilmente molti stili di cella.