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

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

قام بنشر

السلام عليكم

هلا تكرم علي اخوتي و اساتذتي بمثال حول تعقب التغييرات بالاكسل على ان يكون الملف مكتوب EXCEL VBA مفتوح المصدر

حياكم الله وجعل مساعدتكم هذه في ميزان حسناتكم 

قام بنشر
56 دقائق مضت, خالد المخزومي said:

السلام عليكم

هلا تكرم علي اخوتي و اساتذتي بمثال حول تعقب التغييرات بالاكسل على ان يكون الملف مكتوب EXCEL VBA مفتوح المصدر

حياكم الله وجعل مساعدتكم هذه في ميزان حسناتكم 

يمكنك استخدام ميزة التعقب التغيرات في Excel لتسجيل التغييرات التي تحدث على الملف. يمكنك اتباع الخطوات التالية:

 

1. افتح ملف Excel الخاص بك.

2. انتقل إلى علامة التبويب "مراجعة" (Review).

3. انقر على "تعقب التغييرات" (Track Changes).

4. اختر "تعقب التغييرات" (Track Changes).

5. في النافذة التي تظهر، حدد الخيارات التي تريدها، مثل تعقب الخلايا المحددة أو جميع الخلايا في الورقة.

6. انقر على "موافق" (OK) لتفعيل التعقب.

7. سيظهر Excel الآن رسالة تطلب منك حفظ الملف لتمكين التعقب. اضغط "موافق" (OK) لحفظ الملف.

 

عندما يتم الآن إجراء أي تغييرات على الملف، ستظهر تلقائياً في صفحة جديدة تحت علامة التبويب "مراجعة" (Review) بعنوان "مسار التغييرات" (Changes History).

احترامي وتقديري لك 

  • Like 1
قام بنشر
3 دقائق مضت, خالد المخزومي said:

شكرا اخي الفاضل

اي شخص لديه دراية بالاكسل سيقوم بتعطيل ما قمت به لذلك ان طلبت المساعدة بتنفيذ هذا الامر عن  طريق اكواد VBA 

الاصل اخى أن نقوم بتقديم البسيط 

وإليك المطلوب

جرب

Dim PreviousValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Me.UsedRange) Is Nothing Then
        Application.EnableEvents = False
        If PreviousValue <> Target.Value Then
            Call LogChanges(Target.Address, PreviousValue, Target.Value)
            PreviousValue = Target.Value
        End If
        Application.EnableEvents = True
    End If
End Sub

Sub LogChanges(ByVal TargetAddress As String, ByVal OldValue As Variant, ByVal NewValue As Variant)
    Dim wsLog As Worksheet
    Set wsLog = ThisWorkbook.Sheets("Log")
    
    With wsLog
        .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Now
        .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Value = TargetAddress
        .Cells(.Rows.Count, 3).End(xlUp).Offset(1, 0).Value = OldValue
        .Cells(.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = NewValue
    End With
End Sub

الآن، قم بإضافة ورقة جديدة في ملف Excel واسمها "Log"، وهذه الورقة ستحتوي على تفاصيل التغييرات.

عند كل مرة يتم فيها تغيير قيمة في ورقة العمل، سيتم تسجيل الوقت وعنوان الخلية والقيمة القديمة والجديدة في ورقة "Log".

يرجى ملاحظة أنه يمكنك تعديل اسم ورقة العمل التي تحتوي على سجل التغييرات بحسب احتياجاتك.

  • Like 4
قام بنشر
2 ساعات مضت, بلانك said:

 عزيزي abouelhassan  بس على الملف الخلية باللون الاصفر تم تغيرها ولم تظهر في ولرقة لوجو انظر للملف المرفقt.xls

غير واضح اخى

تم الإجابة على المطلوب أم هذا طلب اخر 

قام بنشر (معدل)

 الملف المرفق لاتظهر اي تغيرات في ورقة اللوج log علما بانني غيرت الخلية باللون الاصفر  (15) في العمود (A) كانت 15 وغيرتها الى 151 ولم يحدث اي شيئ في ورقة اللوجlog يخبرني بهذا التغير فما هو السبب؟؟؟؟؟؟؟؟؟؟؟؟ ارجو بانني قد وضحت السؤال وشكرا عي تعبك

تم تعديل بواسطه بلانك
قام بنشر

 شرح عمل الكود:

1. يتم تعريف متغير `PreviousValue` كمتغير يخزن القيمة السابقة للخلية التي تم تغييرها.

2. الجزء الرئيسي من الكود يأتي في الدالة `Worksheet_Change`، والتي تقوم بتنفيذ الإجراءات التالية:
   - تحديد ما إذا كانت الخلية المغيرة واحدة أو مجموعة خلايا، وإذا لم تكن فإن الدالة تخرج.
   - التحقق مما إذا كان التغيير يحدث داخل نطاق الخلايا المستخدمة في ورقة العمل.
   - تعطيل حدث تغيير الخلية مؤقتًا لتجنب تشغيل الكود بشكل لا نهائي.
   - إذا كانت القيمة الجديدة مختلفة عن القيمة السابقة، فإنه يتم استدعاء الدالة `LogChanges` لتسجيل التغيير.

3. الدالة `LogChanges` تقوم بتسجيل التغيير في ورقة "Log" عن طريق إضافة تاريخ ووقت التغيير، وعنوان الخلية المتأثرة، والقيمة القديمة، والقيمة الجديدة.

بهذه الطريقة، يتم تعقب التغييرات التي تحدث في الخلايا وتسجيلها في ورقة مخصصة تسمى "Log".

إذا لم يعمل الكود، قد يكون هناك عدة أسباب لذلك، هي بعض النقاط التي يجب التحقق منها:

1. **التأكد من تمكين ماكرو VBA**: تأكد من أن الوضع الموجود فيه Excel يسمح بتشغيل ماكرو VBA. يمكنك التحقق من ذلك في قسم إعدادات الأمان في Excel.

2. **التحقق من وجود ورقة العمل "Log"**: تأكد من أنه تم إنشاء ورقة العمل "Log" بالطريقة الصحيحة وأن الاسم مكتوب بالشكل الصحيح.

3. **التحقق من الكود الذي تم لصقه في وحدة الفبا**: تأكد من أن الكود تم لصقه في وحدة الفبا الصحيحة ولم يتم تعديله بطريقة تؤثر على عمله.

4. **تفعيل الأحداث في Excel**: تأكد من أن الأحداث مفعلة في Excel. يمكنك التحقق من ذلك بالتأكد من أن خيار "EnableEvents" مفعل في الكود.

5. **اختبار الكود خطوة بخطوة**: يمكنك استخدام محرر VBA لتنفيذ الكود خطوة بخطوة باستخدام زر التشغيل F8، وذلك لمعرفة ما إذا كان هناك أي أخطاء.

قام بنشر

اخي العزيز شكرا على الشرح ولكن انا لست خبيرا بالاكواد فانا لا اريد الشرح ولكن اريد ان يعمل معي .... اريد من حضرتك رؤية الملف السابق لي هل الكود في موضعة الصحيح واذا كان كل شيئ صحيح فلماذا لايعمل؟ ارجو تعديله وان ترسلة لي وشكرا لحضرتك وعلى صبرك معي

قام بنشر
10 دقائق مضت, بلانك said:

شكرا استاذي  abouelhassan  السبب كان وضع الكود بطريقة خاطئة وتم الحل وشكرا للمرة المليون

الفائده أن تعمل بيدك اخى وتتعلم 

الف مبروك 

نحن فى الخدمة اى وقت

احترامى

  • 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