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

هل يمكنني استدعاء ماكرو عند تغيير قيمة خلية معينة


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

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

انا جديد هنا في المنتدى وليس لدي خبرة السؤال هو على الشكل التالي : 

عندي  ثلاث خلايا   الكمية هي الخلية A1 ... السعر الإفرادي هي الخلية B1 ..... الإجمالي هي الخلية C1 

المطلوب تنفيذ ماكرو عند عمل أي تغيير على الخلية b2  ليكون ناتج الماكرو الذي هو (A1*B1)= يظهر الناتج في الخلية C1 

انا اعلم انه بكل بساطة ممكن أن اكتب معادلة =A1*B1 في الخلية C1  ولكن اريد تطبيق هذه المعادلة عن طريق ماكرو للسبب التالي اريد عمل 2 ماكرو واحد يحسبلي السعر الافرادي اذا وضعت الاجمالي والثاني يحسبلي الاجمالي اذا وضعت الافرادي لانه وهذا لا يمكن تنفيذه بكتابة المعالة 

ان شاء الله يكون الامر واضح تقبلو مروري . 

أخوكم أبو يحيى من سوريا

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

انحل معي نصف الموضوع ولكن كيف يمكنني تطبيق الماكرو الثاني مع الاول 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("b1").Value <> "" Then
Range("c1").FormulaArray = "=(a1*b1)"
End If

End Sub

 

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

الأخ الفاضل أبو يحي

أهلاً بك في المنتدى ونورت بين إخوانك

برجاء تغيير اسم الظهور للغة العربية ومراجعة موضوع التوجيهات في الموضوعات المثبتة في المنتدى لمعرفة كيفية التعامل مع المنتدى بشكل أفضل

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

تقبل تحياتي

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

بارك الله فيكم جميعا وشكرا على ردودكم

أولا أخي rasboten لا يتم حساب الافرادي اذا ادخلت الاجمالي فقط يحسب الاجمالي بالملف الذي أرسلته 

ثانيا ً أخي ياسر خليل أبو البراء تقبلوني فأنا جديد لا اعرف قوانين المنتدى وان شاء الله تقبلوني في اسرتكم الكريمة 

ثالثا : سأرفق لكم ما طلبتم + صورة للشرح وارجو الرد من قبلكم 

 

 

أبو يحيى_1.jpg

ملف اكسيل.rar

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

أخي الكريم أبو يحيى

كليك يمين على اسم ورقة العمل ثم View Code ثم ضع الكود التالي في حدث ورقة العمل

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.CountLarge > 1 Then Exit Sub
    If Target.Row > 1 And Target.Column = 2 Then
        Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target.Value * Target.Offset(0, -1).Value
        Application.EnableEvents = True
    End If
    If Target.Row > 1 And Target.Column = 3 Then
        Application.EnableEvents = False
            Target.Offset(0, -1).Value = Target.Value / Target.Offset(0, -2).Value
        Application.EnableEvents = True
    End If
End Sub

 

 

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

بارك الله فيك أخي ياسر أبو البراء ونفع بك الاسلام والمسلمين 
 هذا ما طلبته بالضبط 

ممكن شرح بسيط باللغة العربية للمفردات امام كل سطر  اذا كرمت علي لانوا شايفك وضعت  عدة شروط عند تغيير الخلية بالصفحة 
معلش تحملوني انا جديد على برمجة الفيجوال بيسك 

تم تعديل بواسطه أبو يحيى الجبلاوي
رابط هذا التعليق
شارك

أخي الكريم تفضل شرح مبسط للكود

Private Sub Worksheet_Change(ByVal Target As Range)
    'إذا كان عدد الخلايا التي سيتم فيها التغيير أكثر من خلية يتم الخروج من الإجراء الفرعي
    If Target.Cells.CountLarge > 1 Then Exit Sub
    
    'في حالة التعامل مع العمود الثاني والصف أكبر من 1 أي التعامل مع الصفوف بدايةً من الصف الثاني
    If Target.Row > 1 And Target.Column = 2 Then
        'إلغاء خاصية تمكين الحدث
        Application.EnableEvents = False
            'الخلية في العمود الثالث التالي للخلية الهدف يساوي
            'قيمة الخلية الهدف التي يتم الكتابة فيها × الخلية في العمود الاول
            Target.Offset(0, 1).Value = Target.Value * Target.Offset(0, -1).Value
        'استرجاع الخاصية مرة أخرى وتفعيلها
        Application.EnableEvents = True
    End If
    
    'في حالة التعامل مع العمود الثالث والصف أكبر من 1 أي التعامل مع الصفوف بدايةً من الصف الثاني
    If Target.Row > 1 And Target.Column = 3 Then
        Application.EnableEvents = False
            'الخلية في العمود الثاني السابقة للخلية الهدف تساوي
            'قيمة الخلية الهدف التي في العمود الثالث / الخلية في العمود الأول
            Target.Offset(0, -1).Value = Target.Value / Target.Offset(0, -2).Value
        Application.EnableEvents = True
    End If
End Sub

 

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

بارك الله فيك وشكرا الك شرح وافي وكافي وواضح جدا 
اخي الكريم عذبتك معي طبعا طلبي هو جزء من برنامج متواضع عم قوم بتصميمه كان نقاقصه هذا الموضوع ضمن جدول لتصريف العملات 

بس أخي سؤال اخبر وسامحني تقلت عليك 

بالعادة بالاكسيل لما يتحط دالة وتنسخ الأرقام نسخ لصق او بالسحب للأسفل  بيقوم يعملية الحساب ولكن بعد وضع الكود هي الخاصية التغت في حل ؟ 

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

التعامل مع الأكواد لا يدعم التراجع ..والكود يقوم بعمل الدالة التي تقوم بإدراجها فما الداعي لإدراج المعادلة في هذين العمودين (الثاني والثالث) ..؟

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

عفوا ما بقصد نسخ الدالة بقصد نسخ القيم والأرقام المراد حسابها 
يعني مثلا اذا نسخت كميات + أسعار من جدول أخر وقمت باللصق لا بيتم احتساب الاجمالي لا يتم الاحتساب الا اذا قمت بادخال الاعدادبشكل  يدوي

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

بارك الله فيك أخي سليم أنت ماشاء الله عليك أنت اخي حليت الجزء الذي يخص نسخ الخلايا فعلا عند نسخ الخلايا يتم احتساب المجموع

ولكن أخي الكريم بارك الله فيك لم يعد يحسب الناتج عندي الادخال اليدوي جرب أدخل القيم يدويا لا يتم احتسابها الا اذا ضغطت على زر Del في الخلية 

:fff:

بارك الله فيك انت والأخ ياسر وكل أخ في هذا المنتدى ونفع فيكم الاسلام والمسلمين وسامحوني إن أثقلت عليكم بالأسئلة 

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

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

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

Important Information