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

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

قام بنشر

السلام عليكم ورحمة الله وبركاته

امنحوني دقائق من وقتكم لأني تعبت من هذه الدالة في تلك الوظيفة التي أقمتها لأجلها...

لقد صممتُ مصنفان أحدهما فيه المصروف اليومي لمخزن شركتنا والآخر رصد مجموع ما صرف في الحاسوب الخاص بي، بحيث إذا ما كتبتُ البند ينزل مجموع هذا البند تلقائيا من المصنف الأول الخاص بالمخزن إلى المصنف الخاص بي، فإذا كان المصنف مفتوحًا ينزل المجموع ولا إشكال، وأما إذا كان مغلقًا فلا ينزل بل يكتب #REF!.

فما السبب في ذلك؟ وهل هناك دالة أخرى قد تحل هذه المشكلة أم أن هناك شيئًا ينقصني لإتمام المهمة؟ لأني حاولت مرارًا وتكرارًا ولم أجد حلا.

وفي ذلك أرفقتُ ملفًا يوضح ذلك بالتفصيل.

Documents.rar

قام بنشر

وعليكم السلام أخي الكريم محمد المهندس

في الحقيقة بحثت عن حل بالمعادلات كبديل حيث أن الدالة SUMIF لا تعمل والملف مغلق .. وجربت SUMPRODUCT وجربت الدالة SUM ومعها IF في معادلة صفيف لعلها تؤدي بالغرض ..

ورغم اختلاف المعادلات النتائج واحدة وصحيحة فقط إذا كان الملف مفتوح .. 

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

بالتالي من وجهة نظري (ولعله توجد حلول أخرى والله أعلم) الأفضل هو اختيار الصرف المطلوب في العمود بالكامل وتنفيذ الكود مرة واحدة للحصول على النتائج فقط ..

الكود مرفق به التعليقات لعلها تفيدك في فهم الكود لتستطيع التعديل عليه إذا أحببت في أي وقت

Sub Test()
    Dim wb As Workbook

    'إلغاء تحديث الشاشة لتسريع الكود
    Application.ScreenUpdating = False

        'فتح المصنف الخاص بالمخزن للحصول على النتائج المطلوبة
        Set wb = Workbooks.Open(ThisWorkbook.Path & "\مصنف المخزن.xlsx")
    
        'وضع المعادلات في النطاق في العمود الأول ثم الحصول على القيم فقط
        With ThisWorkbook.Sheets(1)
            With .Range("A3:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
                .Formula = "=SUMIF('مصنف المخزن.xlsx'!الجدول1[النوع],[الصرف],'مصنف المخزن.xlsx'!الجدول1[المبلغ])"
                .Value = .Value
            End With
        End With
    
        'إغلاق المصنف الخاص بالمخزن بدون حفظ التغييرات
        wb.Close False

    'إعادة تفعيل خاصية تحديث الشاشة
    Application.ScreenUpdating = True
End Sub

 

  • 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