محمد حجازي قام بنشر يناير 21, 2005 قام بنشر يناير 21, 2005 السلام عليكم ... أحياناً قد نحتاج للقيام بعملية EnterChange بين خليتين (الخليتين B3 و D3 مثلاً) ، فهل فكرت بعمل مثل هذا الشيء بواسطة كود الـ VBA ؟!! هذه العملية شائعة الاستخدام بين المبرمجين تحت اسم Swap وذلك للقيام بعملية التبديل بين المتغيرات. للقيام بهذه العملية فأنت بحاجة لتعريف متغير يقوم بمهمة الوسيط في عملية التبديل ، المتغير TempValue في الكود التالي: Sub SwapCells1() Dim TempValue With Worksheets(1) TempValue = .Range("B3").Value .Range("B3").Value = .Range("D3").Value .Range("D3").Value = TempValue End With End Sub لاحظ أن المتغير TempValue ينتمي لنوع البيانات Variant ، وذلك لأن الخلايا المتقايضة يمكن أن تحتوي على : نص ، أرقام ، تاريخ ، ... الخ ولكن إذا كنا نعلم بشكل مسبق أن الخليتين B3 ، D3 لن تحتويان إلا على أرقام ، فهنا يمكننا الاستغناء عن المتغير TempValue ، وذلك بواسطة إحدى الطرق الموجودة في الأكواد التالية : Sub SwapCells2() With Worksheets(1) .Range("B3").Value = .Range("B3").Value + .Range("D3").Value .Range("D3").Value = .Range("B3").Value - .Range("D3").Value .Range("B3").Value = .Range("B3").Value - .Range("D3").Value End With End Sub Sub SwapCells3() With Worksheets(1) .Range("B3").Value = .Range("B3").Value * .Range("D3").Value .Range("D3").Value = .Range("B3").Value / .Range("D3").Value .Range("B3").Value = .Range("B3").Value / .Range("D3").Value End With End Sub Sub SwapCells4() With Worksheets(1) .Range("B3").Value = .Range("B3").Value Xor .Range("D3").Value .Range("D3").Value = .Range("D3").Value Xor .Range("B3").Value .Range("B3").Value = .Range("B3").Value Xor .Range("D3").Value End With End Sub إن الاستغناء عن المتغير TempValue يوفر علينا حجز مساحة في ذاكرة الحاسب و بالتالي فإن الطرق السابقة تحد من استهلاك مساحة إضافية من الذاكرة لا طائل منها ، و الطرق السابقة تعتمد على جعل قيمة إحدى الخليتين دالة في قيمتي الخليتين. يمكن أن نقول بأن الطريقة الموجودة في الإجراء SwapCells4 هي الأفضل على الإطلاق :pp: منقول بتصرف من الرابط التالي: http://www.c4arab.com/showthread.php?threadid=28624 Swap.zip
محمد حجازي قام بنشر يناير 29, 2005 الكاتب قام بنشر يناير 29, 2005 (معدل) السلام عليكم ... بالنسبة للإجراء SwapCells4 فهو يعتمد على العلاقة المنطقية Xor العلاقة المنطقية Xor (أو المانع = eXclusive OR) تشبه إلى حد كبير العلاقة المنطقية Or ( أو ) ، ولكن بشروط خاصة ، حيث يتحقق جواب الشرط إذا تحقق أحد الشرطين فقط ، مثال: Sub Test() Dim Qestion1 As Integer Dim Qestion2 As Integer Qestion1 = MsgBox("هل تؤدي فريضة الصلاة", vbYesNo, "هل تقوم بالصلاة؟") Qestion2 = MsgBox("هل تؤدي فريضة الزكاة", vbYesNo, "هل تقوم بالزكاة؟") If Qestion1 = vbYes Xor Qestion2 = vbYes Then MsgBox prompt:="مقصر ، تدارك الوضع", Title:="النتيجة" ElseIf Qestion1 = vbNo And Qestion2 = vbNo Then MsgBox prompt:="أنت في خطر ، عد إلى الله", Title:="النتيجة" Else MsgBox prompt:="ممتاز ، تابع وفقك الله", Title:="النتيجة" End If End Sub نلاحظ من المثال المبسط السابق أن الرسالة (مقصر ، تدارك الوضع) تظهر في حال تحقق أحد الشرطين وعدم تحقق الشرط الآخر. هذا استعمال للتعليمة Xor ، ولكن هل يوجد استعمال آخر لها؟!!! نعم هناك صيغة مختصرة ، انظر للكود : Sub mah() Dim Number As Integer Number = 10 Xor 9 MsgBox Number End Sub قيمة المتغير Number الناتجة عن الإجراء mah هي 3 ، لماذا؟ في هذه الصيغة (الصيغة المختصرة) تقوم التعليمة Xor بالتعامل مع العددين 9 و 10 وفق نظام العد الثنائي Binary ، حيث يتم جعل كل بت من الوجهة مساوياً للواحد إذا كانت العلاقة المنطقية Xor محققة ويتم جعله مساوياً للصفر في حالة عدم تحقق العلاقة المنطقية Xor ؛ وللتوضيح انظر التمثيل التالي للمسألة السابقة: العدد / نظام العد : العدد في النظام العشري ، العدد في النظام الثنائي العدد الأول______________10__________________1010 العدد الثاني_____________ 9 __________________1001 النتيجة ________________3 __________________0011 الميزة في استخدام التعليمة Xor في عملية الـ Swap تكمن بالقدرة على التحكم في الـ Binary و الاكتفاء بذلك مما يغنينا عن القيام بمعالجات تستهلك موارد النظام. أرجو أن أكون قد وفقت في إيصال المعلومة مرفق ملف يقوم بتمثيل عملية الـ Swap باستخدام التعليمة Xor ، و الملف يحتاج لتفعيل الوظيفة الإضافية Analysis ToolPak . تحياتي Xor.zip تم تعديل يناير 30, 2005 بواسطه محمد حجازي
محمد طاهر عرفه قام بنشر فبراير 2, 2005 قام بنشر فبراير 2, 2005 السلام عليكم جزاك الله خيراعلي الموضوع المميز و صراحة لم استخدك دالة ال xor سابقا و لكي اتابع عملها قمت بادراجها فى دالة و اجريت عليها الحسابات كما فى الملف المرفق Function SwapCells5(c1, c2) SwapCells5 = c1 Xor c2 End Function و اعطت نفس النتجية النهائية مع وجود فرق فى خطوة وسيطة فى حالة ال binary و هي ظهور نتيجة التعامل عند تطبيقها علي النظام الثنائي للفرق بين الرقمين 27 و شكرا علي الموضوع المميز Xor2.zip
محمد حجازي قام بنشر فبراير 2, 2005 الكاتب قام بنشر فبراير 2, 2005 السلام عليكم ... شكراً أخي محمد طاهر على الرد الجميل
الردود الموصى بها