مواد جي جدول
جيئن ته توهان اڳ ۾ ئي ڄاڻو ٿا ته ڪيئن ٺاهيو UDFs (۽، مون کي اميد آهي ته، توهان انهن کي پنهنجي Excel ۾ لاڳو ڪرڻ جي ڪوشش ڪئي آهي)، اچو ته ٿورو ڳوڙها ڳولهيون ۽ ڏسو ته ڇا ڪري سگهجي ٿو صورت ۾ توهان جي صارف جي وضاحت ڪيل فنڪشن ڪم نه ڪري رهيو آهي.
ڪجهه مسئلا حل ڪرڻ لاءِ جڏهن ڪسٽم فنڪشن ٺاهي، توهان کي گهڻو ڪري ڊيبگ هلائڻ جي ضرورت پوندي. پوءِ توھان پڪ ڪري سگھوٿا ته فنڪشن صحيح طرح ڪم ڪري رھيو آھي.
اسان ھيٺين ڊيبگنگ ٽيڪنڪ کي ڳوليندا سين:
جڏھن توھان ڪسٽم فنڪشن ٺاھيو ٿا، اتي ھميشه ھڪڙو امڪان آھي ته توهان غلطي ڪندا. ڪسٽم افعال عام طور تي ڪافي پيچيده آهن. ۽ اهي هميشه صحيح طور تي ڪم ڪرڻ شروع نه ڪندا آهن. فارمولا شايد غلط نتيجو يا #VALUE! غلطي. معياري Excel افعال جي برعڪس، توهان ڪي به ٻيا پيغام نه ڏسندا.
ڇا هتي هڪ طريقو آهي ته هڪ ڪسٽم فنڪشن جي قدم قدم تي وڃڻ جي جانچ ڪرڻ لاءِ ته ان جي هر بيان ڪيئن ڪم ڪري ٿي؟ ضرور! ڊيبگنگ ان لاءِ استعمال ڪئي ويندي آهي.
مان توهان کي توهان جي ڪسٽم فنڪشن کي ڊيبگ ڪرڻ جا ڪيترائي طريقا پيش ڪندس ته جيئن توهان هڪ چونڊ ڪري سگهو جيڪو توهان لاءِ ڪم ڪري.
مثال طور، اسان ڪسٽم فنڪشن استعمال ڪندا آهيون GetMaxBetween اسان جي پوئين مضمونن مان هڪ مان جيڪو حساب ڪري ٿو وڌ ۾ وڌ تعداد جي قيمتن جي مخصوص حد ۾:
فنڪشن GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) rngCells vMax = ۾ هر نمبر رينج لاءِNumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End منتخب ڪريو اڳيون NumRange GetMaxBetween = WorksheetFunction.Max(arrNums> فنڪشنMsgBox فنڪشن کي اهم هنڌن تي رکو
حساب جي عمل جي نگراني ڪرڻ لاء، توهان ڊسپلي ڪري سگهو ٿا اسڪرين تي سڀ کان اهم متغير جا قدر صحيح جڳهن ۾. اهو پاپ اپ ڊائلاگ باڪس استعمال ڪري ڪري سگهجي ٿو.
MsgBox هڪ ڊائلاگ باڪس آهي جيڪو توهان استعمال ڪري سگهو ٿا استعمال ڪندڙ کي ڪنهن قسم جو پيغام ڏيکارڻ لاءِ.
MsgBox جو نحو ٻين VBA افعال سان ملندڙ جلندڙ آهي:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])prompt هڪ گهربل دليل آهي. اهو پيغام تي مشتمل آهي جيڪو توهان ڊائلاگ باڪس ۾ ڏسو. اهو پڻ استعمال ڪري سگهجي ٿو انفرادي متغيرن جي قدرن کي ظاهر ڪرڻ لاءِ.
ٻيا سڀ دليل اختياري آهن.
[ بٽن ] - اهو طئي ڪري ٿو ته ڪهڙا بٽڻ ۽ آئڪن آهن ڏيکاريل MsgBox . مثال طور، جيڪڏهن اسان اختيار استعمال ڪريون ٿا vbOkOnly ، ته پوءِ صرف OK بٽڻ ڏيکاريو ويندو. جيتوڻيڪ توھان ھي دليل وڃائي ڇڏيو آھي، ھي بٽڻ ڊفالٽ طور استعمال ڪيو ويندو آھي.
[ عنوان ] - ھتي توھان بيان ڪري سگھوٿا پيغام واري خاني جو عنوان.
ھلو ھن کان مٽايو مشق ڪرڻ ۽ ڊيبگ ڪرڻ شروع ڪرڻ لاءِ لفظ. ڏيکارڻ لاءِپيغام ۾، هيٺ ڏنل لائن کي ڪوڊ ۾ شامل ڪريو GetMaxBetween صارف جي وضاحت ڪيل فنڪشن کان اڳ Case Else آپريٽر:
MsgBox vMax، "ڳڻپ -" & iهتي اهو آهي جيڪو اسان نتيجي ۾ حاصل ڪنداسين:
فنڪشن GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) هر نمبر رينج لاءِ rngCells vMax = NumRange ۾ Case vMax Case MinNum + 0.01 to MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax، "ڳڻپ -" ۽ amp; i Case Else GetMaxBetween = 0 End چونڊيو اڳيون NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionDialog Box ۾ vMax variable استعمال ڪندي، اسان ڏسنداسين ته ڪهڙا انگ چونڊ جي معيار کي پورا ڪن ٿا، تنهنڪري ته اسان انهن مان سڀ کان وڏي چونڊ ڪري سگهون ٿا. اظهار سان "ڳڻپ -" & آئون ٽائيٽل بار ۾، اسان ظاهر ڪريون ٿا ته ڪيترا نمبر اسان اڳ ۾ ئي چونڊيا آهن وڌ ۾ وڌ قدر جو تعين ڪرڻ لاءِ. ڪائونٽر هر نئين قيمت سان وڌايو ويندو.
هڪ دفعو اسان جو UDF سيٽ ڪيو، اسان هيٺ ڏنل فارمولا کي تاريخ جي حد تائين لاڳو ڪريون ٿا:
= GetMaxBetween (A1:A6,10,50)
انٽر بٽڻ کان پوءِ دٻايو ويندو آهي، توهان هڪ پيغام ڏسندا جيئن هيٺ ڏنل اسڪرين شاٽ ۾:
هي پهريون نمبر آهي رينج A1: A6 جيڪو معيار تي پورو لهي ٿو: 10 کان وڌيڪ پر گهٽ 50 کان وڌيڪ.
اوڪي تي ڪلڪ ڪرڻ کان پوءِ، 14 نمبر سان ٻيو نياپو ظاهر ٿيندو. باقي نمبر چونڊ سان نه ٿا ملن.معيار تنهن ڪري، فنڪشن نڪرندو آهي ۽ ٻن قدرن مان سڀ کان وڏي موٽائي ٿو، 17.
MsgBox فنڪشن توهان جي ڪسٽم فنڪشن ۾ سڀ کان اهم هنڌن تي استعمال ڪري سگهجي ٿو ته ڪئين قدرن کي ڪنٽرول ڪرڻ لاء. انفرادي متغير جي تبديلي. ميسيج باڪس تمام ڪارائتو ٿي سگھن ٿا جڏھن توھان وٽ ھڪڙو وڏو فنڪشن ۽ تمام گھڻو حساب آھي. ان صورت ۾، توهان لاءِ اهو طئي ڪرڻ آسان ٿيندو ته ڪوڊ جي ڪهڙي حصي ۾ غلطي ٿئي ٿي.
اسٽاپنگ پوائنٽس جو تعين ڪريو ۽ قدم بہ قدم انجام ڏيو
توهان ڪوڊ ۾ بريڪ پوائنٽ شامل ڪري سگهو ٿا توهان جي فنڪشن جتي ڪوڊ جي عمل کي روڪي ويندي. تنهن ڪري توهان حساب ڪتاب جي عمل کي قدم قدم جي پيروي ڪري سگهو ٿا. ائين ڪرڻ سان، توهان ڏسي سگهو ٿا ته متغيرن جا قدر ڪيئن بدلجن ٿا.
بريڪ پوائنٽ شامل ڪرڻ لاءِ، ڪرسر کي اُن لڪير تي رکو جنهن ۾ بيان شامل آهي جتي توهان روڪڻ لاءِ چونڊيو ٿا. پوءِ ساڄي ڪلڪ ڪريو ۽ چونڊيو Debug -> ٽوگل بريڪ پوائنٽ يا صرف F9 کي دٻايو. توھان فنکشن ڪوڊ جي کاٻي پاسي عمودي گرين ايريا تي مطلوب جڳھ تي ڪلڪ ڪري سگھو ٿا.
ھڪ ڳاڙھو دائرو ظاھر ٿيندو، جيئن توھان ھيٺ ڏنل اسڪرين شاٽ ۾ ڏسي سگھو ٿا. ڪوڊ جي قطار جتي حساب ڪتاب کي روڪيو ويندو ڳاڙهي رنگ ۾ نمايان ٿيل آهي.
هاڻي، VBA ايڊيٽر ونڊو کوليو ويندو جڏهن فنڪشن هلندي. ڪرسر کي ان جاءِ تي رکيو ويندو جتي توھان روڪيو ھو.
جيڪڏھن توھان پنھنجي ماؤس جي ڪرسر کي فنڪشن ڪوڊ ۾ موجود ڪنھن به متغير جي مٿان ھور ڪريو ٿا، توھان انھن کي ڏسي سگھوٿا موجودهقدر:
حساب جاري رکڻ لاءِ F5 کي دٻايو.
نوٽ. بريڪ پوائنٽ کان پوء، توهان حساب جي قدم جي قدم جي ترقي کي ٽريڪ ڪرڻ شروع ڪري سگهو ٿا. جيڪڏهن توهان F8 بٽڻ کي دٻايو، VBA ڪوڊ جي صرف هڪ ايندڙ لائن تي عمل ڪيو ويندو. تير سان پيلي لڪير به آخري ايگزيڪيوٽو ڪوڊ پوزيشن ڏانھن ويندي.
جڏهن ته فنڪشن جي عمل کي ٻيهر روڪيو ويو آهي، توهان مائوس ڪرسر استعمال ڪندي فنڪشن جي سڀني متغيرن جي موجوده قيمتن کي ڏسي سگهو ٿا.
F8 جي ايندڙ پريس اسان کي هڪ قدم اڳتي وٺي ويندي. . تنهن ڪري توهان حساب جي آخر تائين F8 کي دٻائي سگهو ٿا. يا F5 کي دٻايو حساب جاري رکڻ لاءِ ايندڙ بريڪ پوائنٽ تائين.
جيڪڏهن ڪو نقص ٿئي ٿو، ته ڪرسر کي ڪوڊ جي ان نقطي تي روڪيو ويندو جتي غلطي ٿي. ۽ توهان پڻ هڪ پاپ اپ غلطي پيغام ڏسندا. اهو مسئلو جو سبب معلوم ڪرڻ آسان بڻائي ٿو.
توهان بيان ڪيل بريڪ پوائنٽس لاڳو ڪيا ويندا جيستائين توهان فائل بند نه ڪندا. جڏهن توهان ان کي ٻيهر کوليو، توهان کي انهن کي ٻيهر سيٽ ڪرڻو پوندو. سڀ کان وڌيڪ آسان طريقو ناهي، ڇا توهان سوچيو ٿا؟
بهرحال، اهو مسئلو حل ڪري سگهجي ٿو. لازمي پوائنٽن تي فنڪشن ڪوڊ ۾ Stop بيان داخل ڪريو، ۽ توھان پروگرام جي عمل کي روڪي سگھوٿا ساڳيءَ طرح جڏھن بريڪ پوائنٽس استعمال ڪريو.
جڏهن VBA هڪ Stop بيان سان ملندو، اهو پروگرام جي عمل کي روڪيندو ۽ توهان جي عمل جو انتظار ڪندو. variables جي قدر چيڪ ڪريو، پوءجاري رکڻ لاءِ F5 کي دٻايو.
يا مٿي بيان ڪيل فنڪشن کي قدم بہ قدم پورو ڪرڻ لاءِ F8 کي دٻايو.
Stop بيان پروگرام جو حصو آهي ۽ ان ڪري ڊهي نه ويو آهي، جيئن بريڪ پوائنٽ سان معاملو آهي. جڏهن توهان ڊيبگنگ مڪمل ڪيو، ان کي پاڻ کي هٽايو. يا ان کي هڪ اقتباس (') سان اڳئين تبصري ۾ تبديل ڪريو.
Debug.Print آپريٽر کي استعمال ڪندي ڊيبنگ
توهان رکي سگهو ٿا Debug.Print فنڪشن ڪوڊ صحيح جڳهه تي. هي ڪارائتو آهي چيڪ ڪرڻ لاءِ ڪارائتو آهي قدرن کي جانچڻ لاءِ جيڪي cyclically تبديل ٿي رهيا آهن.
توهان هيٺ ڏنل اسڪرين شاٽ تي Debug.Print جي ڪارڪردگي جو هڪ مثال ڏسي سگهو ٿا.
Statement Debug.Print i, vMax پرنٽ ڪري ٿو قدر ۽ انهن جا آرڊينل نمبر.
فوري ونڊو ۾ توهان کي ٻه نمبر (17 ۽ 14) نظر اچن ٿا چونڊيل رينج مان، جيڪي ان سان ملندڙ جلندڙ آهن. حدون مقرر ڪريو ۽ جن مان وڌ ۾ وڌ چونڊيو ويندو. انگن 1 ۽ 2 جو مطلب آهي ته فنڪشن 2 چڪر مڪمل ڪيا آهن جن ۾ انگ منتخب ڪيا ويا آهن. اسان سڀ کان اهم متغير جا قدر ڏسون ٿا، جيئن اسان اڳ ۾ MsgBox سان ڪيو. پر هن فنڪشن کي نه روڪيو.
پروسيجر مان هڪ فنڪشن کي ڪال ڪريو
توهان ورڪ شيٽ ۾ ڪنهن سيل مان نه پر هڪ طريقي سان استعمال ڪندڙ جي وضاحت ڪيل فنڪشن کي ڪال ڪري سگهو ٿا. ھن حالت ۾، سڀ نقص ڏيکاريا ويندا Visual Basic Editor ونڊو ۾.
ھتي آھي توھان ڪيئن ڪال ڪري سگھوٿا صارف جي بيان ڪيل فنڪشن کي GetMaxBerweenطريقيڪار:
سب ٽيسٽ() Dim x x = GetMaxBetween(Range ("A1:A6") 10, 50) MsgBox(x) End Subڪوڊ ۾ ڪٿي به ڪرسر کي جاءِ ڏيو ۽ F5 کي دٻايو. جيڪڏهن فنڪشن ۾ ڪا به نقص نه آهي، ته توهان حساب جي نتيجن سان گڏ هڪ پاپ اپ ونڊو ڏسندا.
غلطي جي صورت ۾، توهان VBA ايڊيٽر ۾ هڪ لاڳاپيل پيغام ڏسندا. ڳڻپ کي روڪيو ويندو ۽ ڪوڊ جي لائن جنهن ۾ غلطي ٿي آهي پيلي ۾ نمايان ڪئي ويندي. توهان آساني سان سڃاڻي سگهو ٿا ته غلطي ڪٿي ۽ ڇو ٿي آهي.
بس بس. ھاڻي توھان ٺاھيو آھي پنھنجو اضافو، ان کي Excel ۾ شامل ڪيو ۽ توھان ان ۾ UDF استعمال ڪري سگھو ٿا. جيڪڏھن توھان وڌيڪ UDFs استعمال ڪرڻ چاھيو ٿا، صرف VBA ايڊيٽر ۾ ايڊ-ان ماڊل ۾ ڪوڊ لکو ۽ ان کي محفوظ ڪريو.
اڄ لاءِ اھو ئي آھي. اسان مختلف طريقن کي ڍڪي ڇڏيو آهي ڪسٽم ڪمن کي ڊيبگ ڪرڻ ۽ توهان جي ورڪ بڪ ۾ انهن کي ڪيئن استعمال ڪجي. اسان کي اميد آهي ته توهان اهي هدايتون مددگار ثابت ڪندا. جيڪڏھن توھان وٽ ڪي سوال آھن، ھن مضمون ۾ تبصرن ۾ لکو.