فہرست کا خانہ
جیسا کہ آپ پہلے ہی جانتے ہیں کہ UDFs کیسے بنانا ہے (اور، مجھے امید ہے کہ آپ نے انہیں اپنے ایکسل میں لاگو کرنے کی بھی کوشش کی ہوگی)، آئیے تھوڑا گہرائی میں کھودیں اور دیکھیں کہ اگر آپ کا صارف کا طے شدہ فنکشن کام نہیں کررہا ہے تو کیا کیا جاسکتا ہے۔
اپنی مرضی کے مطابق فنکشن بناتے وقت کچھ مسائل کو حل کرنے کے لیے، آپ کو غالباً ڈیبگ چلانے کی ضرورت ہوگی۔ تب آپ یقین کر سکتے ہیں کہ فنکشن صحیح طریقے سے کام کر رہا ہے۔
ہم ڈیبگنگ کی درج ذیل تکنیکوں کو تلاش کریں گے:
جب آپ اپنی مرضی کے مطابق فنکشن بناتے ہیں، تو ہمیشہ ایک امکان ہوتا ہے۔ کہ آپ غلطی کریں گے۔ حسب ضرورت افعال عام طور پر کافی پیچیدہ ہوتے ہیں۔ اور وہ ہمیشہ صحیح طریقے سے کام کرنا شروع نہیں کرتے ہیں۔ فارمولہ ایک غلط نتیجہ یا #VALUE! غلطی معیاری ایکسل فنکشنز کے برعکس، آپ کو کوئی دوسرا پیغام نظر نہیں آئے گا۔
کیا کوئی طریقہ ہے کہ کسٹم فنکشن کو مرحلہ وار چیک کیا جائے کہ اس کا ہر بیان کیسے کام کرتا ہے؟ ضرور! اس کے لیے ڈیبگنگ کا استعمال کیا جاتا ہے۔
میں آپ کو آپ کے حسب ضرورت فنکشن کو ڈیبگ کرنے کے کئی طریقے پیش کروں گا تاکہ آپ اسے منتخب کر سکیں جو آپ کے لیے کارآمد ہو۔
مثال کے طور پر، ہم کسٹم فنکشن کا استعمال کرتے ہیں GetMaxBetween ہمارے پچھلے آرٹیکلز میں سے ایک سے جو قدروں کی مخصوص رینج میں زیادہ سے زیادہ تعداد کا حساب لگاتا ہے:
فنکشن GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i بطور عدد ReDim arrNums(rngCells.Count) rngCells vMax میں ہر ایک نمبر رینج کے لیےNumRange سلیکٹ کیس vMax کیس MinNum + 0.01 سے MaxNum - 0.01 arrNums(i) = vMax i = i + 1 کیس ورنہ GetMaxBetween = 0 End کو منتخب کریں اگلا NumRange GetMaxBetween = WorksheetFunction.Max(arrNums> فنکشنز ہیں) سیلز کی رینج جہاں نمبرز لکھے جاتے ہیں، ساتھ ہی ساتھ اقدار کی اوپری اور نچلی حد۔MsgBox فنکشن کو اہم جگہوں پر رکھیں
حساب کے عمل کو مانیٹر کرنے کے لیے، آپ ڈسپلے کر سکتے ہیں اسکرین پر سب سے اہم متغیرات کی قدریں صحیح جگہوں پر۔ یہ پاپ اپ ڈائیلاگ باکسز کا استعمال کرتے ہوئے کیا جا سکتا ہے۔
MsgBox ایک ڈائیلاگ باکس ہے جسے آپ صارف کو کسی قسم کا پیغام دکھانے کے لیے استعمال کر سکتے ہیں۔
MsgBox کا نحو دیگر VBA فنکشنز کی طرح ہے:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])prompt ایک مطلوبہ دلیل ہے۔ اس میں وہ پیغام ہوتا ہے جو آپ ڈائیلاگ باکس میں دیکھتے ہیں۔ اس کا استعمال انفرادی متغیرات کی قدروں کو ظاہر کرنے کے لیے بھی کیا جا سکتا ہے۔
دیگر تمام آرگیومینٹس اختیاری ہیں۔
[ بٹن ] - یہ تعین کرتا ہے کہ کون سے بٹن اور شبیہیں ہیں MsgBox میں دکھایا گیا ہے۔ مثال کے طور پر، اگر ہم آپشن vbOkOnly استعمال کرتے ہیں، تو صرف OK بٹن ظاہر ہوگا۔ یہاں تک کہ اگر آپ نے یہ دلیل چھوٹ دی ہے، یہ بٹن بطور ڈیفالٹ استعمال ہوتا ہے۔
[ عنوان ] - یہاں آپ میسج باکس کا عنوان بتا سکتے ہیں۔
چلو اس سے سوئچ کرتے ہیں۔ مشق کرنے اور ڈیبگنگ شروع کرنے کے لیے الفاظ۔ ظاہر کرنے کے لیےپیغام، Case Else آپریٹر سے پہلے GetMaxBetween صارف کے بیان کردہ فنکشن کے کوڈ میں درج ذیل لائن شامل کریں:
MsgBox vMax, "Count -" & 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 میں ہر نمبر رینج کے لیے کیس vMax کیس MinNum + 0.01 سے MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax، "Count -" & i کیس دوسری صورت میں GetMaxBetween = 0 End اگلا نمبر منتخب کریں GetMaxBetween = WorksheetFunction.Max(arrNums) اینڈ فنکشنڈائیلاگ باکس میں vMax متغیر کا استعمال کرتے ہوئے، ہم دیکھیں گے کہ کون سے نمبر انتخاب کے معیار پر پورا اترتے ہیں۔ کہ ہم ان میں سے سب سے بڑے کو منتخب کر سکتے ہیں۔ اظہار کے ساتھ " شمار - " & I ٹائٹل بار میں، ہم اس بات کی نشاندہی کرتے ہیں کہ ہم نے زیادہ سے زیادہ قدر کا تعین کرنے کے لیے پہلے سے ہی کتنے نمبر منتخب کیے ہیں۔ ہر نئی قیمت کے ساتھ کاؤنٹر میں اضافہ کیا جائے گا۔
ہم نے اپنا UDF سیٹ کر لینے کے بعد، ہم درج ذیل فارمولے کو تاریخ کی حد پر لاگو کرتے ہیں:
= GetMaxBetween (A1:A6,10,50)
انٹر بٹن کے بعد دبایا جاتا ہے، آپ کو نیچے اسکرین شاٹ کی طرح ایک پیغام نظر آئے گا:
یہ رینج A1: A6 میں پہلا نمبر ہے جو معیار پر پورا اترتا ہے: 10 سے زیادہ لیکن کم 50 سے زیادہ۔
آپ کے OK پر کلک کرنے کے بعد، نمبر 14 کے ساتھ دوسرا پیغام ظاہر ہوتا ہے۔ باقی نمبرز انتخاب سے میل نہیں کھاتے ہیں۔معیار. لہذا، فنکشن باہر نکلتا ہے اور دو قدروں میں سے سب سے بڑی واپسی کرتا ہے، 17۔
MsgBox فنکشن آپ کے کسٹم فنکشن میں اہم ترین جگہوں پر استعمال کیا جا سکتا ہے تاکہ یہ کنٹرول کیا جا سکے انفرادی متغیرات کی تبدیلی۔ جب آپ کے پاس ایک بڑا فنکشن ہوتا ہے اور بہت زیادہ حساب ہوتا ہے تو میسج باکسز بہت مفید ہو سکتے ہیں۔ اس صورت میں، آپ کے لیے یہ طے کرنا آسان ہو جائے گا کہ کوڈ کے کس حصے میں خرابی واقع ہوئی ہے۔
اسٹاپنگ پوائنٹس کا تعین کریں اور مرحلہ وار انجام دیں
آپ کے کوڈ میں بریک پوائنٹس شامل کر سکتے ہیں۔ آپ کا فنکشن جہاں کوڈ پر عمل درآمد رک جائے گا۔ لہذا آپ حساب کتاب کے عمل کو مرحلہ وار پیروی کر سکتے ہیں۔ ایسا کرنے سے، آپ دیکھ سکتے ہیں کہ متغیرات کی قدریں کیسے بدلتی ہیں۔
بریک پوائنٹ شامل کرنے کے لیے، کرسر کو اس لائن پر رکھیں جس میں بیان ہے جہاں آپ توقف کا انتخاب کرتے ہیں۔ پھر دائیں کلک کریں اور منتخب کریں ڈیبگ -> بریک پوائنٹ کو ٹوگل کریں یا صرف دبائیں F9۔ آپ فنکشن کوڈ کے بائیں جانب عمودی گرے ایریا پر مطلوبہ جگہ پر بھی کلک کر سکتے ہیں۔
ایک سرخ دائرہ ظاہر ہوگا، جیسا کہ آپ نیچے اسکرین شاٹ میں دیکھ سکتے ہیں۔ کوڈ کی لائن جہاں حساب کتاب روکا جائے گا سرخ رنگ میں نمایاں کیا گیا ہے۔
اب، فنکشن کے چلنے پر VBA ایڈیٹر ونڈو کھل جائے گی۔ کرسر کو اس مقام پر رکھا جائے گا جہاں آپ رکے تھے۔
اگر آپ اپنے ماؤس کرسر کو فنکشن کوڈ میں موجود کسی بھی متغیر پر ہوور کرتے ہیں، تو آپ ان کا کرنٹ دیکھ سکتے ہیں۔قدر:
کیلکولیشن جاری رکھنے کے لیے F5 دبائیں۔
نوٹ۔ بریک پوائنٹ کے بعد، آپ مرحلہ وار حسابات کی پیشرفت کا سراغ لگانا شروع کر سکتے ہیں۔ اگر آپ F8 بٹن دبائیں گے تو VBA کوڈ کی صرف ایک اگلی لائن پر عمل کیا جائے گا۔ تیر کے ساتھ پیلی لکیر بھی آخری کوڈ کی پوزیشن پر چلی جائے گی۔
چونکہ فنکشن کا عمل دوبارہ روک دیا گیا ہے، آپ ماؤس کرسر کا استعمال کرتے ہوئے فنکشن کے تمام متغیرات کی موجودہ قدریں دیکھ سکتے ہیں۔
F8 کا اگلا پریس ہمیں ایک قدم آگے لے جائے گا۔ . لہذا آپ حساب کے اختتام تک F8 دبا سکتے ہیں۔ یا اگلے بریک پوائنٹ تک حساب جاری رکھنے کے لیے F5 دبائیں۔
اگر کوئی خرابی ہوتی ہے، تو کرسر کو کوڈ کے اس مقام پر روک دیا جائے گا جہاں غلطی ہوئی تھی۔ اور آپ کو ایک پاپ اپ ایرر میسج بھی نظر آئے گا۔ اس سے مسئلے کی وجہ کا تعین کرنا آسان ہو جاتا ہے۔
آپ کے بیان کردہ بریک پوائنٹ اس وقت تک لاگو ہوں گے جب تک آپ فائل بند نہیں کر دیتے۔ جب آپ اسے دوبارہ کھولیں گے، آپ کو انہیں دوبارہ ترتیب دینے کی ضرورت ہوگی۔ سب سے آسان طریقہ نہیں، کیا آپ نہیں سوچتے؟
تاہم، یہ مسئلہ حل کیا جا سکتا ہے۔ فنکشن کوڈ میں ضروری پوائنٹس پر ایک Stop اسٹیٹمنٹ داخل کریں، اور آپ پروگرام کو اسی طرح روک سکتے ہیں جیسے بریک پوائنٹ استعمال کرتے وقت۔
جب VBA ایک Stop بیان کا سامنا کرتا ہے، تو یہ پروگرام پر عمل درآمد کو روک دے گا اور آپ کی کارروائی کا انتظار کرے گا۔ متغیرات کی قدروں کو چیک کریں، پھرجاری رکھنے کے لیے F5 دبائیں۔
یا اوپر بیان کیے گئے فنکشن کو مرحلہ وار پورا کرنے کے لیے F8 دبائیں۔
Stop بیان پروگرام کا حصہ ہے اور اس لیے حذف نہیں کیا گیا، جیسا کہ بریک پوائنٹ کا معاملہ ہے۔ جب آپ ڈیبگنگ کر لیں تو اسے خود ہی ہٹا دیں۔ یا اس سے پہلے ایک اقتباس (') کے ساتھ تبصرے میں تبدیل کریں۔
Debug.Print آپریٹر کا استعمال کرتے ہوئے ڈیبگ کرنا
آپ Debug.Print کو اس میں رکھ سکتے ہیں۔ فنکشن کوڈ صحیح جگہ پر۔ یہ ان متغیرات کی قدروں کو جانچنے کے لیے کارآمد ہے جو سائیکلی طور پر تبدیل ہو رہے ہیں۔
آپ نیچے دیے گئے اسکرین شاٹ پر Debug.Print کی کارکردگی کی ایک مثال دیکھ سکتے ہیں۔
بیان Debug.Print i, vMax پرنٹ کرتا ہے اقدار اور ان کے آرڈینل نمبرز۔
فوری ونڈو میں آپ کو منتخب رینج سے دو نمبر (17 اور 14) نظر آتے ہیں، جو کہ حد مقرر کریں اور جن میں سے زیادہ سے زیادہ کا انتخاب کیا جائے گا۔ ہندسوں 1 اور 2 کا مطلب ہے کہ فنکشن نے 2 چکر مکمل کیے ہیں جن میں نمبر منتخب کیے گئے تھے۔ ہم سب سے اہم متغیرات کی قدریں دیکھتے ہیں، جیسا کہ ہم نے پہلے MsgBox کے ساتھ کیا تھا۔ لیکن اس سے فنکشن بند نہیں ہوا۔
ایک طریقہ کار سے فنکشن کو کال کریں
آپ ورک شیٹ میں موجود کسی سیل سے نہیں بلکہ طریقہ کار سے صارف کے طے شدہ فنکشن کو کال کرسکتے ہیں۔ اس صورت میں، تمام خرابیاں Visual Basic Editor ونڈو میں دکھائی دیں گی۔
یہاں یہ ہے کہ آپ صارف کی طرف سے طے شدہ فنکشن GetMaxBerween کو کس طرح کال کر سکتے ہیں۔طریقہ کار:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ) , 10, 50) MsgBox(x) End Subکرسر کو کوڈ میں کہیں بھی رکھیں اور F5 دبائیں۔ اگر فنکشن میں کوئی خرابی نہیں ہے تو، آپ کو حساب کتاب کے نتیجے کے ساتھ ایک پاپ اپ ونڈو نظر آئے گی۔
خرابی کی صورت میں، آپ کو VBA ایڈیٹر میں ایک متعلقہ پیغام نظر آئے گا۔ کیلکولیشن روک دیا جائے گا اور کوڈ کی لائن جس میں غلطی ہوئی تھی اسے پیلے رنگ میں نمایاں کیا جائے گا۔ آپ آسانی سے شناخت کر سکتے ہیں کہ خرابی کہاں اور کیوں پیش آئی۔
بس۔ اب آپ نے اپنا ایڈ ان بنا لیا ہے، اسے ایکسل میں شامل کیا ہے اور آپ اس میں UDF استعمال کر سکتے ہیں۔ اگر آپ مزید UDFs استعمال کرنا چاہتے ہیں تو صرف VBA ایڈیٹر میں ایڈ ان ماڈیول میں کوڈ لکھیں اور اسے محفوظ کریں۔
آج کے لیے بس۔ ہم نے حسب ضرورت فنکشنز کو ڈیبگ کرنے کے مختلف طریقوں کا احاطہ کیا ہے اور انہیں آپ کی ورک بک میں استعمال کرنے کا طریقہ سیکھا ہے۔ ہم واقعی امید کرتے ہیں کہ آپ کو یہ رہنما خطوط مددگار ثابت ہوں گے۔ اگر آپ کے کوئی سوالات ہیں، تو اس مضمون کے تبصروں میں لکھیں۔