KB0204: Alguns arquivos Excel são lentos com os vínculos de dados
Problema
Se um arquivo Excel tiver vínculos de dados do Excel (consulte Criar elementos a partir do Excel) e muitos estilos de célula, ele poderá começar a rolar muito lentamente e o Excel parecerá não estar respondendo.
Esse problema pode acontecer se o arquivo Excel contiver mais do que 3000 estilos de célula, aproximadamente. Você pode verificar o número dos estilos de célula com o seguinte comando VBA no Immediate Window:
print Activeworkbook.Styles.Count Ler mais
Aqui estão detalhas as etapas para verificar isso:
- Pressione Alt+F11 para abrir o editor do VBA.
- Vá para o Immediate Window. Se ela não estiver visível, você pode exibi-la clicando em View > Immediate Window.
- Digite o comando a seguir e pressione Enter
print Activeworkbook.Styles.Count
Solução: Limpar pastas de trabalho afetadas
- Copiar suas planilhas em uma nova pasta de trabalho Ler mais
No Office 2013 e posteriores, copiar planilhas entre pastas de trabalho evita o acúmulo de estilos de células não usados por padrão:
- Selecione todas as planilhas em sua pasta de trabalho mantendo pressionada a tecla SHIFT e clique na primeira e na última planilhas.
- Clique com o botão direito do mouse na seleção: Move or copy… > To book: (new book) e marque Create a copy > OK
- Salve a nova pasta de trabalho com um novo nome
- Limpe suas pastas de trabalho com uma ferramenta de limpeza Ler mais
Use a ferramenta de limpeza recomendada pela Microsoft em KB213904. Usando a ferramenta XLStyles, clique em Get Excel File, marque Force all cell styles to 'Normal' e clique em Process File. Quando o Excel é aberto com o arquivo limpo, salve-o com um novo nome.
- Remova os estilos de célula personalizados da sua pasta de trabalho usando uma macro VBA Ler mais
Abra o editor do VBA com Alt+F11. Selecione sua pasta de trabalho e clique em Insert > Module. Então copie uma das macros a seguir e execute-a pressionando F5:
DeleteCustomStyles() remove todos os estilos de célula personalizados da sua pasta de trabalho.
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 "Styles deleted: " & i_cust & " styles" & Chr(13) & "Styles left: " & ActiveWorkbook.Styles.Count End SubRemove_Styles() remove somente os estilos de célula personalizados não usados da sua pasta de trabalho. É semelhante à macro acima, contudo pode demorar muito tempo a executar. A macro foi fornecida pelo suporte do 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
A melhor solução seria evitar colar estilos de célula não usados, mas exige que a Microsoft corrija um bug no Excel 2007 e posteriores. Até agora, a Microsoft não considerou o impacto empresarial suficientemente elevado para fornecer essa correção. Se sua empresa tiver um contrato de suporte do Microsoft Office e você desejar entrar em contato com a Microsoft para solicitar uma correção, consulte o número de caso na Microsoft 113012810172527.
Explicação
Algumas pastas de trabalho .xlsx contêm um elevado número (várias dezenas de milhares) de estilos de célula devido a bugs e design de código problemático no Excel. Um fator contribuinte são também as ferramentas de criação de relatórios que por vezes geram muitos estilos de célula desnecessários.