قاعدة المعارف KB0204

يتسم أداء بعض ملفات Excel بالبطء مع ارتباطات البيانات

المشكلة

إذا كان ملف Excel يحتوي على ارتباطات بيانات Excel (راجع 21. ارتباطات بيانات Excel) والكثير من أنماط الخلايا، فقد يبدأ في التمرير ببطء شديد وقد تصبح استجابة Excel بطيئة للغاية.

قد تحدث هذه المشكلة إذا كان ملف Excel يحتوي على أكثر من 3000 نمط خلية. يمكنك التحقق من عدد أنماط الخلايا باستخدام أمر VBA التالي في النافذة الحالية:

print Activeworkbook.Styles.Count

فيما يلي خطوات التحقق من هذا الأمر بالتفصيل:

  1. اضغط على المفتاحين Alt+F11 لفتح محرر VBA.
  2. انتقل إلى النافذة الحالية. إذا لم تكن ظاهرة، يمكنك عرضها بواسطة النقر فوق عرض النافذة الحالية.
  3. اكتب الأمر التالي واضغط على Enter
    print Activeworkbook.Styles.Count

الحل: تنظيف المصنفات المتأثرة بالمشكلة

  • قم بنسخ أوراق العمل الخاصة بك إلى مصنف جديد

    في Office 2013 والإصدارات الأحدث، يؤدي نسخ أوراق العمل بين المصنفات إلى منع تراكم أنماط الخلايا غير المستخدمة بشكل افتراضي:

    • حدد كل الأوراق في المصنف الخاص بك عن طريق الضغط مع الاستمرار على المفتاح SHIFT ثم انقر فوق ورقة العمل الأولى والأخيرة
    • انقر بزر الماوس الأيمن فوق التحديد: نقل أو نسخ…إلى المصنف: (مصنف جديد) وحدد إنشاء نسخةموافق
    • احفظ المصنف الجديد باسم جديد

    في Office 2007 و2010، يؤدي نسخ ورقة عمل إلى مصنف جديد إلى نسخ كل أنماط الخلايا غير المستخدمة. لمنع حدوث ذلك، يرجى تنشيط الإصلاح العاجل التالي أولاً:

    في حالة تثبيت آخر تحديثات لإصدار Office الموجود لديك، فعلى الأرجح أن هذا الإصلاح العاجل مثبت بالفعل. ومع ذلك، يجب أيضًا تنشيط هذا الإصلاح باستخدام الحل إصلاح المشكلة الذي توفره Microsoft أو في السجل على النحو الموضح في مقالات Microsoft التالية:

    إذا لم ينجح تنشيط الإصلاح العاجل، فقم بتطبيق التحديث المذكور في قسم الحل في مقالات Microsoft الموضحة أعلاه.

  • تنظيف المصنفات الخاصة بك باستخدام أداة تنظيف

    استخدم أداة التنظيف الموصى بها من Microsoft في KB213904. باستخدام الأداة XLStyles، انقر فوق جلب ملف Excel، وحدد فرض كل أنماط الخلايا على 'عادي'، ثم انقر فوق معالجة الملف. عند فتح Excel باستخدام الملف الذي تم تنظيفه، احفظه باسم جديد.

  • إزالة أنماط الخلايا المخصصة من المصنف باستخدام وحدة ماكرو بلغة VBA

    افتح محرر VBA بواسطة الضغط على المفتاحين Alt + F11. حدد المصنف الخاص بك ثم انقر فوق إدراجوحدة نمطية. ثم الصق إحدى وحدات الماكرو التالية وقم بتشغيلها بواسطة الضغط على المفتاح F5:

    DeleteCustomStyles() لإزالة كل أنماط الخلايا المخصصة من المصنف الخاص بك.

    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() لإزالة فقط أنماط الخلايا المخصصة غير المستخدمة من المصنف الخاص بك. وهي مماثلة لوحدة الماكرو الموضحة أعلاه، ولكن قد يستغرق تشغيلها وقتًا طويلاً. قام دعم 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

سيكون الحل الأفضل هو منع لصق أنماط الخلايا غير المستخدمة، لكنه يتطلب من Microsoft إصلاح خطأ في Excel 2007 والإصدارات الأحدث. حتى الآن لا تعتبر Microsoft تأثير هذه المشكلة على الأعمال كبيرًا بدرجة تكفي لتقديم هذا الحل. إذا كان لدى شركتك عقد دعم من Microsoft Office وكنت تريد الاتصال بشركة Microsoft لطلب إصلاح، يمكنك الرجوع إلى رقم حالة Microsoft 113012810172527.

التفسير

تحتوي بعض مصنفات .xlsx على عدد كبير (عدة عشرات الآلاف) من أنماط الخلايا بسبب الأخطاء وتصميم التعليمات البرمجية المسبب للمشكلات في برنامج Excel. تعد أدوات الإبلاغ أيضًا عاملاً من عوامل حدوث المشكلة، حيث تؤدي في بعض الأحيان إلى إنشاء العديد من أنماط الخلايا دون داع.

مشاركة