Algunos archivos Excel van lentos con los vínculos de datos
Problema
Si un archivo de Excel contiene vínculos de datos de Excel (consulte 21. Enlaces de datos de Excel) y demasiados estilos de celda, el desplazamiento por este podría empezar a ir muy lentamente y Excel podría no responder bien.
Este problema puede suceder si el archivo Excel contiene más de 3000 estilos de celda aproximadamente. Puede comprobar el número de estilos de celda con el siguiente comando de VBA en la Ventana Inmediato:
print Activeworkbook.Styles.Count
Los pasos para comprobarlo son los siguientes:
- Pulse Alt+F11 para abrir el editor de VBA.
- Vaya a la ventana Inmediato. Si no es visible, puede mostrarla haciendo clic en Ver → Ventana Inmediato.
- Escriba el comando siguiente y pulse Intro
print Activeworkbook.Styles.Count
Solución: Limpiar los libros afectados
- Copie sus hojas de cálculo en un nuevo libro
En Office 2013 y versiones posteriores, la copia de hojas de cálculo entre libros evita la acumulación de estilos de celda no utilizados de forma predeterminada:
- Seleccione todas las hojas de su libro: mantenga pulsada la tecla MAYÚS y haga clic en la primera y la última hoja de cálculo.
- Haga clic con el botón derecho en la selección: Mover o copiar… → Al libro: (libro nuevo) y marque Crear una copia → Aceptar
- Guarde el nuevo libro con un nombre diferente
En Office 2007 y 2010, al copiar una hoja de cálculo en un libro nuevo, se copian todos los estilos de celda no utilizados. Para evitar esto, active primero la revisión siguiente:
Si su versión de Office está plenamente actualizada, esta revisión probablemente ya estará instalada. No obstante, también tiene que activar esta revisión, bien utilizando la solución Fix it proporcionada por Microsoft o en el registro, como se explica en los siguientes artículos de Microsoft:
- Microsoft Office 2007: KB2553085
- Microsoft Office 2010: KB2598127, publicado en la actualización de Office 2010 de abril de 2012.
Si activar la revisión no resuelve el problema, aplique la actualización mencionada en la sección Resolution de los artículos de Microsoft indicados anteriormente.
- Limpie los libros afectados con una herramienta de limpieza
Use la herramienta de limpieza recomendada por Microsoft en KB213904. Con la herramienta XLStyles, haga clic en Obtener archivo de Excel, marque Forzar los estilos de todas las celdas a 'Normal' y, a continuación, haga clic en Procesar archivo. Cuando se abra Excel con el archivo limpio, guárdelo con un nombre nuevo.
- Elimine los estilos de celda personalizados de su libro utilizando una macro de VBA
Abra el editor de VBA con Alt+F11. Seleccione el libro y haga clic en Insertar → Módulo. A continuación, pegue la siguiente macro y ejecútela pulsando F5:
DeleteCustomStyles() elimina de su libro todos los estilos de celda personalizados.
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 Sub
Remove_Styles() solo elimina de su libro los estilos de celda personalizados que no estén en uso. Es similar a la macro anterior, pero puede necesitar mucho tiempo para ejecutarse. La macro ha sido proporcionada por el soporte técnico de 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 mejor solución sería evitar pegar los estilos de celda sin usar, pero es necesario que Microsoft solucione un error en Excel 2007 y versiones posteriores. Hasta el momento Microsoft no ha considerado el impacto comercial lo suficientemente importante como para proporcionar esta corrección. Si su empresa tiene un contrato de soporte técnico de Microsoft Office y desea ponerse en contacto con Microsoft para solicitar una corrección, puede indicar el número de caso de Microsoft 113012810172527.
Explicación
Algunos libros .xlsx contienen un número muy grande de estilos de celda (varias decenas de miles) debido a errores y al diseño de código problemático en Excel. Un factor que contribuye también son las herramientas de informes que a veces generan innecesariamente muchos estilos de celda.