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

كيف اجعل الكود يعمل اليا بدون استخدام زر


skyblue

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

استاذي الفاضل :علي بن حسين السحيب المحترم

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

المعذرة لقد ارقفت لك الملف بالخطأ . فانا اقصد هذا الملف المرفق :

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

شاهد المرفق والذي يحتوي على الكود التالي:

Private Sub Worksheet_Change(ByVal Target As Range)

TA = Target.Address

If TA = "$AE$20" Or TA = "$AE$21" Then

If [AE20] = 1 And [AE21] = 2 Then
[C17] = 7
[C18] = 2
[C19] = 5
[C20] = 4
[B17] = 10
[B18] = 10
[B19] = 60
[B20] = 60
ElseIf [AE21] = 0 And [AE20] = 1 Then
[C17] = 2
[C18] = 5
[C19] = 4
[C20] = ""
[B17] = 10
[B18] = 60
[B19] = 60
[B20] = ""
ElseIf [AE20] = 0 And [AE21] = 2 Then
[C17] = 1
[C18] = 5
[C19] = 4
[C20] = ""
[B17] = 10
[B18] = 60
[B19] = 60
[B20] = ""
ElseIf [AE20] = 0 And [AE21] = 0 Then
[C17] = ""
[C18] = ""
[C19] = ""
[C20] = ""
[B17] = ""
[B18] = ""
[B19] = ""
[B20] = ""
End If
End If
End Sub

شاهد المرفق،

If_Function_in_VBA.rar

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

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

ومكانة الشخص اللي يسهل امور الناس مكانة عظيمة وبها حديث .

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

تحياتي

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

استاذي الفاضل :علي السحيب لقد حاولت ان اضيف كود يخص vlookup الى ملفي لكن الكود لم يقبل معي واصبح يظهر لي ان هناك خطأ . امل التكرم بالتعديل على الملف

وتقبل تحياتي الغالية لك

مرفق ملف :

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

أولاً للمعلومية .. لا نستطيع إدراج كودين تحت متغير واحد كالذي قمت أنت بعمله في المرفق الموجود في مشاركتك السابقة .. لذا كان لا بد من دمج الكودين تحت نفس المتغير .. كما هو واضح في الكود التالي:

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

http://www.officena.net/ib/index.php?showtopic=13916

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

TA = Target.Address

If TA = "$AE$20" Or TA = "$AE$21" Then

If [AE20] = 1 And [AE21] = 2 Then
[C17] = 7
[C18] = 2
[C19] = 5
[C20] = 4
[B17] = 10
[B18] = 10
[B19] = 60
[B20] = 60
ElseIf [AE21] = 0 And [AE20] = 1 Then
[C17] = 2
[C18] = 5
[C19] = 4
[C20] = ""
[B17] = 10
[B18] = 60
[B19] = 60
[B20] = ""
ElseIf [AE20] = 0 And [AE21] = 2 Then
[C17] = 1
[C18] = 5
[C19] = 4
[C20] = ""
[B17] = 10
[B18] = 60
[B19] = 60
[B20] = ""
ElseIf [AE20] = 0 And [AE21] = 0 Then
[C17] = ""
[C18] = ""
[C19] = ""
[C20] = ""
[B17] = ""
[B18] = ""
[B19] = ""
[B20] = ""
End If

[D17:X20].clearcontents

For A = 4 To 24
For B = 2 To 22
For C = 17 To 20

Cells(C, A) = Application.WorksheetFunction.Vlookup(Cells(C, 3), [AC1:AX4], B, 0)

Next
Next
Next

End If
End Sub

شاهد المرفق،

If_Function_in_VBA.rar

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

الحقيقة شي يفرح :fff::clapping:

وجزاك الله كل خير فعلا الفضل لله سبحانه وتعالى ثم الى مجهوداتك النيرة وتقديم يد العون لنا .

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

اخوي علي جعل الله ايامك كلها فرح وسعادة واحترامي وتقديري الكبير لك .

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

اخوي علي لو اعتبرنا ان البيانات الاساسية اللي هي من AC2:AX7

ليست في نفس صفحة النتائج اي في صفحة اخرى . كيف بيكون الكود .

فالله يوفقك ياخوي علي والله طريقت الاكواد رائعة رائعة رائعة ومفيدة جدا .

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

تحياتي لك

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

يكون ذلك فقط بإضافة إسم الورقة التي تحتوي على البيانات الأساسية قبل معيار البحث الموجود داخل الدالة VLOOKUP .. هكذا:

Cells(C, A) = Application.WorksheetFunction.Vlookup(Cells(C, 3), ورقة6.[AC1:AX4], B, 0)

على فكرة .. راجع الرابط التالي يمكن تستفيد منه في التعامل مع الأسهم،

http://www.officena.net/ib/index.php?showtopic=14026

شاهد المرفق،

If_Function_in_VBA.rar

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

اخوي علي السحيب شكرا لك على التعديل( وايضا التعديل على موضوع البحث في منتهى الروعة ) والحقيقة انك والله اديت خدمة كبيرة لي وفعلا اتعبتك معي ولكن الله يقدرني على رد هذا الجميل .

الله يوفقك ويستر عليك ويجعل لك من كل ضيق مخرجا .

وكل عام وانت بالف خير .

تحياتي لك :fff:

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

  • 2 weeks later...

استاذي علي السحيب يحفظك ربي

كل عام وانت بخير

عندي ملاحظة بسيطة على الكود اما التكرم بتعديلها لانني سوف استخدم هذا الكود في ملف لدي وهي :

في sheet1 اذا كان C17=7 فيجب ان يتم البحث عن رقم 7 في البيانات الاساسية في المجال من AC1:AC4 فاذا وجد ان AC1=7 يتم تسجيل الاعداد التي تقابلها منAD1=AX طبعا عن طريق vlookup

وهكذا لبقية الارقام .

لانني عندما جعلت المدى من AC1:AC4 ثابتا كما هو

ولكنني غيرت الاعداد في المجال AD1:AX4

فان تلك الاعداد لاتظهر صحيحة في المدى من d17:x20

تحياتي لك

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

اخوي علي ايضا اللي لاحظته على الكود ان الكود لايسترجع القيم وانما يكرر قيمة اخر خانة . فمثلا لو كانت الخلية C17=7

فان الكود ياخذ الرقم الموجود في اخر خلية في البيانات الاساسية وهي AX ثم يقوم بتكرارها .

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

فالحقيقة انا كنت ارغب ان يكون الكود باستخدام ISNA(vLOOKUP

تحياتي لك يااستاذ علي

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

تم التعديل على الطلبين المذكورين .. مع ملاحظة ضرورة إضافة عمودين فارغين بعد العمود AC .. في صفحة البيانات .. وذلك حتى يتم التوافق في عدد الأعمدة المطلوب البحث داخلها في صفحة البيانات وعدد الأعمدة المطلوب ملئها في الصفحة الرئيسية

والآن شاهد المرفق،

If_Function_in_VBA.rar

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

مبدع :clapping: يحفظك ربي من كل شر ....والله العظيم من أمس وانا حايس حوسة لايعلم بها الا الله لانني حاولت ان اطبقها على برنامج لدي وماقدرت اخيرا قلت مالها الا مشرفنا اخوي علي السحيب والحمد لله رديت علي وحليت لي مشكلتي .. اضحك الله سنك وفرج همك.

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

[D17:X20].clearcontents

For A = 4 To 24

For C = 17 To 20

Cells(C, A) = Application.WorksheetFunction.Vlookup(Cells(C, 3), æÑÞÉ6.[AC1:AZ4], A, 0)

Next

Next

وهل هي تعطي نفس نتيجة اisna vlookup.

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

واليوم عندي الفرحة فرحتين فرحة الامطار الغزيرة التي هطلت علينا في جدة ومكة المكرمة جعلها الله سقيا خير للبلاد والعباد وفرحة ردك الرائع .

تحياتي الغالية لك .

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

العفو أخي الكريم، نحن في الخدمة،

بخصوص شرح الكود الخاص بالدالة VLOOKUP:

[D17:X20].clearcontents
هذا الجزء يقوم بإفراغ الخلايا التي ستخرج في بها النتائج من محتوياتها .. وذلك حتى تظل الخلايا فارغة عند حدوث أي خطاً .. والمقصود بالخطأ هنا ليس خطأ في إسترجاع النتائج .. وإنما الخطأ هو في وجود قيمة معينة في النطاق C17:C20 لا يوجد لها نظير في البيانات الأساسية كالقيمة 1 مثلاً في الملف المرفق في مشاركتي السابقة .. فهذه القيمة ليست موجودة في جدول البيانات الأساسية في النطاق AC1:AC4 .. وكذلك عندما تكون تكون أحد خلايا النطاق C17:C20 فارغة .. فيتم تطبيق نفس الشرط، وهذه الطريقة تحل محل إستخدام الدالة ISNA .. داخل ورقة العمل .. وكما لاحظنا الطريقة تختلف بين دوال ورقة العمل ودوال الـ VBA .. في الوصول لنفس الهدف. مع ملاحظة وجود الجزء التالي في بداية الكود ..
On Error Resume Next
وذلك لكي يتم الإستمرار في إسترجاع النتائج اللاحقة في حالة ورود أي خطأ من الأخطاء التي تحدثنا عنها .. وعدم توقف عمل الكود.
For A = 4 To 24
هذا الجزء يمثل أرقام الأعمدة المطلوب وضع النتائج داخلها في النطاق D17:X20 .. وهذه الأعمدة تبداً من العمود رقم 4 إلى العمود رقم 24 .. ونفس هذه العدد يمثل أيضاً عدد الأعمدة المطلوب البحث داخلها في صفحة البيانات الأساسية .. ولكن هنا لم نعتمد على أرقام الأعمدة (لأنه في الدالة VLOOKUP .. تمت الإشارة إلى النطاق المطلوب البحث داخله) بل أعتمدنا على عدد الأعمدة داخل النطاق المحدد في الدالة VLOOKUP والذي يجب أن يتوافق مع عدد الأعمدة المطلوب وضع النتائج داخلها .. لذلك قمنا بإضافة عمودين فارغين بين العمود AC والعمود AF في صفحة البيانات الأساسية وذلك حتى يبداً البحث من العمود الرابع في النطاق (ِAF) وينتهي في العمود الرابع والعشرين (AZ) كما هو الحال في الجدول الخاص بالنتائج. هذا الجزء يمثل أرقام الصفوف في الجدول المطلوب وضع النتائج بداخله.
For C = 17 To 20
Cells(C, A) = Application.WorksheetFunction.Vlookup(Cells(C, 3), ورقة6.[AC1:AZ4], A, 0)
في هذا الجزء يتم تطبيق الدالة VLOOKUP .. حيث الرجوع لكل خلية يمثل رقم صفها المرجع C .. ويمثل رقم عمودها المرجع A .. هنا يتم وضع كلمة NEXT بعدد المراجع .. وهذه الكلمة تعني التالي .. وهي تعمل مع التعليمة For .. والتي تستخدم لتطبيق نفس الكود على أكثر من خلية.
Next
Next

أتمنى أن يكون الشرح واضحاً،

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

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

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

Important Information