اذهب الي المحتوي
أوفيسنا

هل من حل لتسريع عمل هذا الكود --اويجعل الملف يعمل بشكل اسرع


إذهب إلى أفضل إجابة Solved by محمد هشام.,

الردود الموصى بها

انتبه من فضلك .. السلام عليكم ,, لابد من التحية عند بدء أى مشاركة ,,مرفق شيت اكسيل وقد قمت بعمل كود  بدلا من المعادلات -- بمعنى ان معادلة قيمة المشتريات = الكمية * السعر  ومعادلة ضريبة القيمة المضافة = قيمة المشتريات * نسبة الضريبة (14%) ومعادلة ضريبة الخصم =قيمة المشتريات * نسبة ضريبة الخصم  فقمت بعمل كود بدلا م المعادلات وهذا هو الكود

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Dim d As Variant
Dim f As Variant
Dim e As Integer
e = d + f
For d = 4 To 99
For f = 100 To 1000 Step 100
Cells(d, 1).Value = Val(Cells(d, 3).Value - Cells(d, 2).Value + Cells(d - 1, 1).Value)
Cells(d, 12).Value = Val(Cells(d, 11).Value * Cells(d, 10).Value)
Cells(d, 14).Value = Val(Cells(d, 13).Value * Cells(d, 10).Value)
Cells(d, 10).Value = Val(Cells(d, 9).Value * Cells(d, 8).Value)
Cells(d + f - 3, 1).Value = Val(Cells(d + f - 3, 3).Value - Cells(d + f - 3, 2).Value + Cells(d + f - 4, 1).Value)
Cells(d + f - 3, 12).Value = Val(Cells(d + f - 3, 11).Value * Cells(d + f - 3, 10).Value)
Cells(d + f - 3, 14).Value = Val(Cells(d + f - 3, 13).Value * Cells(d + f - 3, 10).Value)
Cells(d + f - 3, 10).Value = Val(Cells(d + f - 3, 9).Value * Cells(d + f - 3, 8).Value)
Next
Next
Application.ScreenUpdating = True
End Sub

ولكنه ثقيل جدا وبطيئى فهل من حل لجعل هذا الكود يعمل بشكل اسرع

نموذج.xlsb

رابط هذا التعليق
شارك

اعتقد من خلال نظرة سريعة على الكود تحتاج الى تخصيص اخر صف به بيانات بينما انت تقوم بحلقة تكرارية لصفوف فارغة لذلك سيكون بطيء  لصفوف لا فائدة  منها

رابط هذا التعليق
شارك

الاستاذ :عبدالفتاح في بي اكسيل  شكرا لرد حضرتك 

1- انا مبتدئ فى الفيجول بيسك وهذا الكود هو ما استطعت كتابته فان كان فى تعديل يساعد فى تسريعه ارجو كتابته

2-ان مش فاهم معنى هذه العبارة (عتقد من خلال نظرة سريعة على الكود تحتاج الى تخصيص اخر صف به بيانات بينما انت تقوم بحلقة تكرارية لصفوف فارغة لذلك سيكون بطيء  لصفوف لا فائدة  منها)

 

 

رابط هذا التعليق
شارك

  • أفضل إجابة

السلام عليكم ورحمة الله تعالى وبركاته  ..تفضل اخي جرب  تم تعديل صيغة الكود   

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim e As Integer
    Dim LastRowInSheet  As Long
    Dim d As Variant
    Dim f As Variant
    Dim InputArray      As Variant
    Application.ScreenUpdating = False
    LastRowInSheet = Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row

    InputArray = Range("A1:N" & LastRowInSheet)

   e = d + f

    For d = 4 To 99
        For f = 100 To 1000 Step 100
            InputArray(d, 1) = InputArray(d, 3) - InputArray(d, 2) + InputArray(d - 1, 1)
            InputArray(d, 12) = InputArray(d, 11) * InputArray(d, 10)
            InputArray(d, 14) = InputArray(d, 13) * InputArray(d, 10)
            InputArray(d, 10) = InputArray(d, 9) * InputArray(d, 8)

            InputArray(d + f - 3, 1) = InputArray(d + f - 3, 3) - InputArray(d + f - 3, 2) + InputArray(d + f - 4, 1)
            InputArray(d + f - 3, 12) = InputArray(d + f - 3, 11) * InputArray(d + f - 3, 10)
            InputArray(d + f - 3, 14) = InputArray(d + f - 3, 13) * InputArray(d + f - 3, 10)
            InputArray(d + f - 3, 10) = InputArray(d + f - 3, 9) * InputArray(d + f - 3, 8)
        Next
    Next

    Range("A1:N" & LastRowInSheet) = InputArray
    Application.ScreenUpdating = True
End Sub

نمودج-2.xlsb

  • Like 2
رابط هذا التعليق
شارك

السلام عليكم جميعا --وصباح الخير على الجميع

شكرا ا/ Mohamed Hicham

شكرا / AbuuAhmed

الاكواد تعمل بسرعة عن الملف الاصلى ولكن ينقص شئ واحد وهو ان عمود الجانب الدائن وهو عبارة عن المستحق للمورد =( قيمة المشتريات+ ضريبة القيمة المضافة- ضريبة الخصم)  كان من المفترض ان تتم هذه العملية من خلال الكود والان الكود يقوم بحساب قيمة المشتريات وقيمة ضريبة القيمة المضافة وقيمة ضريبة الخصم ولا يحسب المستحق للمورد فى عمود الجانب الدائن السابق ذكره

 

رابط هذا التعليق
شارك

أخي تدخلي لحل مشكلة البطء ولم أتدخل في العمليات الحسابية.
الحل الأخير لا يمكن مقارنته بما سبق ، فحلي كان لمشكلة تقنية تحتاج إلى انتباه وقد وجهت لكم نصيحة في مشاركة سابقة لي ولم تلتفتوا إليها وكان بها نصف الحل.
المشكلة كانت اختياركم للحدث الخطأ والآخر هي مشكلة تكرار الحدث مع كل عملية تحديث للخلايا وقد تم تغيير الحدث وتم تعطيل الحدث أثناء العمليات الحسابية.

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

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information