ایکسل UDF کام نہیں کر رہا: مسائل اور حل

  • اس کا اشتراک
Michael Brown

اس مضمون میں، ہم ان مسائل پر ایک نظر ڈالیں گے جن کا سامنا آپ کو اپنی ورک بک میں حسب ضرورت فنکشنز استعمال کرتے وقت ہو سکتا ہے۔ میں آپ کو یہ بتانے کی کوشش کروں گا کہ ان کی وجہ کیا ہے اور انہیں کتنی آسانی سے حل کیا جا سکتا ہے۔

یہاں ہم اس کے بارے میں بات کریں گے:

    اس سے قبل ہم نے اس کے بارے میں بات کی تھی۔ کسٹم فنکشن یہ ہے کہ اسے کیسے بنایا جائے اور استعمال کیا جائے۔ اگر آپ کو لگتا ہے کہ آپ کو پہلے سے UDFs کے بنیادی علم کو تازہ کرنے کی ضرورت ہے، تو ایک وقفہ لیں اور میرا پچھلا مضمون دیکھیں۔

    Excel UDF دوبارہ گنتی کیوں نہیں کر رہا ہے؟

    جب آپ اس میں کوئی تبدیلی کرتے ہیں آپ کی ورک بک، Excel آپ کے پاس موجود ہر فارمولے کا دوبارہ حساب نہیں کرے گا۔ یہ ان فارمولوں کے نتائج کو اپ ڈیٹ کرے گا جو صرف تبدیل شدہ سیلز سے منسلک ہیں۔

    لیکن اس کا تعلق معیاری Excel فنکشنز سے ہے۔ جہاں تک حسب ضرورت کا تعلق ہے، Excel VBA کوڈ کی توثیق نہیں کر سکتا اور دوسرے سیلز کی شناخت نہیں کر سکتا جو حسب ضرورت فنکشن کے نتیجے کو بھی متاثر کر سکتے ہیں۔ لہذا، جب آپ ورک بک میں تبدیلیاں کرتے ہیں تو آپ کا حسب ضرورت فارمولہ تبدیل نہیں ہوسکتا ہے۔

    مسئلہ حل کرنے کے لیے، آپ کو صرف Application.Volatile اسٹیٹمنٹ استعمال کرنے کی ضرورت ہوگی۔ اسے کیسے لاگو کرنا ہے اس کے بارے میں مرحلہ وار ہدایات جاننے کے لیے اگلا باب دیکھیں۔

    غیر اتار چڑھاؤ بمقابلہ غیر اتار چڑھاؤ والے کسٹم فنکشنز

    بطور ڈیفالٹ، Excel میں کسٹم فنکشنز غیر مستحکم نہیں ہیں۔ اس کا مطلب یہ ہے کہ UDF کی دوبارہ گنتی صرف اس صورت میں کی جاتی ہے جب کسی بھی سیل کی قدر میں تبدیلی کا حوالہ دیا جاتا ہے۔ لیکن اگر خلیات کی شکل، کا نامورک شیٹ، فائل کا نام تبدیل کریں، پھر UDF میں کوئی تبدیلی نہیں آئے گی۔

    آئیے الفاظ سے مثالوں میں بدلتے ہیں۔ مثال کے طور پر، آپ کو سیل میں اپنی ورک بک کا نام لکھنا ہوگا۔ ایسا کرنے کے لیے، آپ ایک حسب ضرورت فنکشن بناتے ہیں:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

    اب مندرجہ ذیل کیس کا تصور کریں۔ آپ نے سیل میں حسب ضرورت فارمولہ =WorkbookName() لکھا اور وہاں فائل کا نام ملا۔ تھوڑی دیر میں، آپ نے فائل کا نام تبدیل کرنے کا فیصلہ کیا اور اسے مختلف نام سے محفوظ کیا۔ لیکن آپ سیل میں موجود قدر کو دیکھیں اور دیکھیں کہ یہ تبدیل نہیں ہوا ہے۔ اب بھی ایک پرانا فائل کا نام ہے جو اب درست نہیں ہے۔

    چونکہ اس فنکشن میں کوئی دلیل نہیں ہے، اس لیے فنکشن کو دوبارہ شمار نہیں کیا جاتا ہے (چاہے آپ ورک بک کا نام تبدیل کریں، اسے بند کریں، اور پھر دوبارہ کھولیں۔ یہ)۔

    نوٹ۔ اپنی فائل کے تمام فنکشنز کو دوبارہ گننے کے لیے، آپ Ctrl + Alt + F9 شارٹ کٹ استعمال کر سکتے ہیں۔

    کیا کوئی آسان طریقہ ہے؟ جب بھی ورک شیٹ میں تبدیلی آتی ہے تو فارمولہ دوبارہ گنتی کرنے کے لیے، آپ کو کوڈ کی ایک اضافی لائن کی ضرورت ہوتی ہے۔ اپنے فنکشن کے شروع میں درج ذیل کوڈ کو چسپاں کریں:

    Application.Volatile

    تو، آپ کا کوڈ اس طرح نظر آئے گا:

    فنکشن WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    اب آپ کا UDF غیر مستحکم ہے، اس لیے اگر ورک شیٹ میں کوئی سیل ہو تو اسے خود بخود دوبارہ شمار کیا جائے گا۔دوبارہ گنتی کی گئی ہے یا ورک بک میں کوئی تبدیلی آئی ہے۔ جیسے ہی آپ فائل کا نام تبدیل کریں گے، آپ کو وہ اپ ڈیٹ فوری طور پر نظر آئے گا۔

    نوٹ۔ براہ کرم ذہن میں رکھیں کہ بہت سارے غیر مستحکم افعال آپ کے ایکسل کو سست کر سکتے ہیں۔ سب کے بعد، بہت زیادہ حسب ضرورت فنکشنز ہیں جو پیچیدہ حسابات انجام دیتے ہیں اور بڑے ڈیٹا رینجز پر مسلسل کام کرتے ہیں۔

    اس لیے، میں صرف اس جگہ اتار چڑھاؤ کا استعمال کرنے کا مشورہ دیتا ہوں جہاں اس کی واقعی ضرورت ہو۔

    کیوں کسٹم فنکشنز دستیاب نہیں ہیں

    جب آپ اپنی مرضی کے فنکشن کے نام کے پہلے حروف کو داخل کرتے ہیں تو یہ ظاہر ہوتا ہے۔ ان پٹ سیل کے آگے ڈراپ ڈاؤن فہرست میں، بالکل معیاری ایکسل فنکشنز کی طرح۔

    تاہم، ایسا ہمیشہ نہیں ہوتا ہے۔ کونسی غلطیاں اس صورت حال کا سبب بن سکتی ہیں؟

    اگر آپ کے پاس Excel 2003-2007 ہے، تو UDF کبھی بھی ڈراپ ڈاؤن فہرست میں ظاہر نہیں ہوتا ہے۔ وہاں آپ صرف معیاری فنکشن دیکھ سکتے ہیں۔

    لیکن اگر آپ ایکسل کا نیا ورژن استعمال کر رہے ہیں، تب بھی آپ سے غلطی سے ایک اور غلطی ہو سکتی ہے۔

    آپ دیکھتے ہیں، حسب ضرورت فنکشن کا ہونا ضروری ہے۔ ایک معیاری VBA ماڈیول جسے ماڈیول کہتے ہیں۔ جب آپ فنکشن کوڈ لکھنے کے لیے ایک نیا ماڈیول شامل کرتے ہیں تو ایک ماڈیول فولڈر خود بخود بن جاتا ہے جس میں تمام ماڈیول لکھے جاتے ہیں۔

    لیکن بعض اوقات ایسا ہوتا ہے کہ نیا ماڈیول نہیں ہوتا ہے۔ پیدا ہو رہا ہے. اگلے اسکرین شاٹ پر آپ دیکھ سکتے ہیں کہ کسٹم فنکشن کوڈ "Microsoft Excel Objects" ماڈیول میں ہےیہ ورک بک۔

    بات یہ ہے کہ آپ ورک شیٹ یا ورک بک کے کوڈ ایریا میں اپنی مرضی کے مطابق فنکشن نہیں رکھ سکتے۔ اس صورت میں، فنکشن کام نہیں کرے گا. مزید یہ کہ یہ فنکشنز کی ڈراپ ڈاؤن فہرست میں ظاہر نہیں ہوگا۔ اس لیے، کوڈ کو ہمیشہ فولڈر ماڈیولز میں ہونا چاہیے۔

    ایکسل کسٹم فنکشن ہیلپ ٹیکسٹ ظاہر نہیں ہوتا ہے

    ایک اور مسئلہ ہوسکتا ہے وہ اشارہ ہے جو آپ پیسٹ کرتے وقت دیکھتے ہیں۔ اپنی مرضی کے مطابق فنکشن. اگر آپ معیاری فنکشن استعمال کرتے ہیں، تو آپ کو ہمیشہ فنکشن اور اس کے دلائل کے لیے ٹول ٹپ نظر آئے گا۔ لیکن UDFs کا کیا ہوگا؟

    اگر آپ کے پاس بہت زیادہ حسب ضرورت فنکشنز ہیں، تو آپ کے لیے یہ یاد رکھنا بہت مشکل ہوگا کہ ان میں سے ہر ایک کیا حساب کرتا ہے۔ یہ یاد رکھنا اور بھی مشکل ہو جائے گا کہ کون سے دلائل استعمال کیے جائیں۔ میرے خیال میں یاد دہانی کے طور پر اپنے حسب ضرورت افعال کی وضاحت کرنا اچھا خیال ہوگا۔

    اس کے لیے، میں Application.MacroOptions طریقہ استعمال کرنے کا مشورہ دوں گا۔ یہ آپ کو فنکشن وزرڈ ونڈو میں نہ صرف فنکشن بلکہ اس کے ہر دلائل کی تفصیل دکھانے میں مدد کرے گا۔ جب آپ فارمولا بار میں Fx بٹن پر کلک کرتے ہیں تو آپ کو یہ ونڈو نظر آتی ہے۔

    آئیے دیکھتے ہیں کہ اپنے UDFs میں اس طرح کا اشارہ کیسے شامل کیا جائے۔ پچھلے مضمون میں ہم نے GetMaxBetween کسٹم فنکشن کو دیکھا۔ یہ مخصوص رینج میں زیادہ سے زیادہ تعداد تلاش کرتا ہے اور تین دلائل لیتا ہے: عددی اقدار کی ایک رینج، اور زیادہ سے زیادہ اور کم از کم قدرتلاش کریں۔

    اب ہم اس حسب ضرورت فنکشن کے لیے ایک تفصیل شامل کریں گے۔ ایسا کرنے کے لیے، Application.MacroOptions کمانڈ بنائیں اور چلائیں۔ GetMaxBetween فنکشن کے لیے، آپ درج ذیل کمانڈ چلا سکتے ہیں:

    Sub RegisterUDF () Dim strFuncName As String 'فنکشن کا نام جس کو آپ Dim strDescr کو String کے طور پر رجسٹر کرنا چاہتے ہیں' فنکشن کی تفصیل خود Dim strArgs () بطور اسٹرنگ 'فنکشن آرگیومینٹس کی تفصیل' رجسٹر کریں GetMaxBetween فنکشن ReDim strArgs (1 سے 3) 'آپ کے فنکشن میں دلائل کی تعداد strFuncName = "GetMaxBetween" strDescr = "مخصوص رینج میں زیادہ سے زیادہ تعداد strArgs = (1)" "عددی اقدار کی حد" strArgs (2) = "نچلے وقفہ کی سرحد" strArgs (3) = "اوپری وقفہ بارڈر" Application.MacroOptions میکرو: = strFuncName، _ تفصیل: = strDescr، _ ArgumentDescriptions: = strArgs: = _ Category " My Custom Functions " End Sub

    یا

    Sub RegisterUDF () Application.MacroOptions میکرو: = "GetMaxBetween" , _ Description: = "مخصوص رینج میں زیادہ سے زیادہ تعداد" , _ زمرہ: = "میرا حسب ضرورت افعال" , _ ArgumentDescriptions: = Array (_ "عددی اقدار کی حد" , _ "کم وقفہ بور der" , _ "اوپری وقفہ بارڈر" ) End Sub

    Variable str FuncName فنکشن کا نام ہے۔ strDescr - فنکشن کی تفصیل۔ strArgs متغیر میں ہر دلیل کے لیے اشارے ہوتے ہیں۔

    آپ حیران ہوسکتے ہیں کہ چوتھی دلیل کیا ہےApplication.MacroOptions. اس اختیاری دلیل کو زمرہ کا نام دیا گیا ہے اور یہ ایکسل فنکشنز کی کلاس کی نشاندہی کرتا ہے جس میں ہمارا کسٹم GetMaxBetween () فنکشن رکھا جائے گا۔ آپ اسے موجودہ زمروں میں سے کسی کے بعد نام دے سکتے ہیں: Math & ; ٹریگ، شماریاتی، منطقی، وغیرہ۔ آپ نئے زمرے کے لیے ایک نام بتا سکتے ہیں جس میں آپ اپنے تخلیق کردہ فنکشنز کو رکھیں گے۔ اگر آپ زمرہ کی دلیل استعمال نہیں کرتے ہیں، تو حسب ضرورت فنکشن خود بخود "یوزر ڈیفائنڈ" زمرہ میں آ جائے گا۔

    فنکشن کوڈ کو ماڈیول ونڈو میں چسپاں کریں:

    پھر "رن" بٹن پر کلک کریں۔ کمانڈ آپ کے GetMaxBetween() فنکشن کے ساتھ Fx بٹن کو استعمال کرنے کے لیے تمام سیٹنگیں انجام دے گی۔

    اگر آپ کسی سیل میں فنکشن داخل کرنے کی کوشش کرتے ہیں تو Insert Function ٹول، آپ دیکھیں گے کہ آپ کا GetMaxBetween فنکشن "My Custom Functions" کے زمرے میں ہے:

    آپ صرف سیل میں فنکشن کا نام ٹائپ کرنا شروع کر سکتے ہیں اور آپ کو فنکشنز کی ڈراپ ڈاؤن فہرست میں اپنی مرضی کے مطابق فنکشن نظر آئے گا جس سے منتخب کیا جانا ہے۔

    پھر فنکشن وزرڈ کو کال کریں۔ Fx بٹن کے ساتھ۔

    ٹپ۔ آپ فنکشن وزرڈ کو کھولنے کے لیے کلیدی مجموعہ CRTL + A بھی استعمال کر سکتے ہیں۔

    فنکشن وزرڈ ونڈو میں آپ کو اپنے فنکشن کی تفصیل نظر آئے گی، ساتھ ہی پہلی دلیل کے لیے اشارہ بھی۔ اگر آپ اپنا کرسر اس کے اوپر رکھتے ہیں۔دوسری یا تیسری دلیل، آپ کو ان کے لیے اشارے بھی نظر آئیں گے۔

    اگر آپ ان اشاروں کے متن کو تبدیل کرنا چاہتے ہیں تو strDescr اور strArgs<کی قدروں کو تبدیل کریں۔ 7> رجسٹر یو ڈی ایف () کوڈ میں متغیرات۔ پھر رجسٹر یو ڈی ایف () کمانڈ کو دوبارہ چلائیں۔

    اگر آپ تمام سیٹنگز کو انڈو کرنا چاہتے ہیں اور فنکشن کی تفصیل کو صاف کرنا چاہتے ہیں تو اس کوڈ کو چلائیں:

    Sub UnregisterUDF () Application.MacroOptions میکرو: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    جب آپ اپنی مرضی کے مطابق فنکشن داخل کرتے ہیں تو اشارہ حاصل کرنے کا ایک اور طریقہ ہے۔ فنکشن کا نام درج کریں اور پھر دبائیں Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    آپ کو فنکشن کے تمام دلائل کی فہرست نظر آئے گی:

    بدقسمتی سے، یہاں آپ کو فنکشن کی تفصیل اور اس کے دلائل نظر نہیں آئیں گے۔ لیکن اگر دلائل کے نام کافی معلوماتی ہیں، تو وہ بھی مددگار ثابت ہو سکتے ہیں۔ پھر بھی، یہ کچھ بھی نہ کرنے سے بہتر ہے :)

    یہ UDFs کے لیے انٹیلی سینس بنانے میں تھوڑا اور کام کرے گا جو معیاری ایکسل فنکشنز کی طرح کام کرتے ہیں۔ بدقسمتی سے، مائیکروسافٹ کوئی آپشن فراہم نہیں کرتا ہے۔ فی الحال دستیاب واحد حل ایکسل-ڈی این اے انٹیلی سینس ایکسٹینشن ہے۔ آپ ڈویلپر کی ویب سائٹ پر مزید معلومات حاصل کر سکتے ہیں۔

    امید ہے کہ یہ رہنما خطوط آپ کو مسائل حل کرنے میں مدد کریں گے جب آپ کا حسب ضرورت فنکشن کام نہیں کرتا ہے یا نہیں کرتا ہے۔جیسا آپ چاہیں کام کریں۔ اگر پھر بھی، آپ کا UDF کام کرنے میں ناکام رہتا ہے، تو براہ کرم تبصرے کے سیکشن میں اپنے مسئلے کی درست وضاحت کریں۔ ہم اسے معلوم کرنے اور آپ کے لیے حل تلاش کرنے کی کوشش کریں گے؛)

    مائیکل براؤن سافٹ ویئر ٹولز کا استعمال کرتے ہوئے پیچیدہ عمل کو آسان بنانے کے جذبے کے ساتھ ٹیکنالوجی سے وابستہ ایک سرشار ہے۔ ٹیک انڈسٹری میں ایک دہائی سے زیادہ کے تجربے کے ساتھ، اس نے مائیکروسافٹ ایکسل اور آؤٹ لک کے ساتھ ساتھ گوگل شیٹس اور دستاویزات میں بھی اپنی صلاحیتوں کو نکھارا ہے۔ مائیکل کا بلاگ اپنے علم اور مہارت کو دوسروں کے ساتھ بانٹنے کے لیے وقف ہے، پیداواری صلاحیت اور کارکردگی کو بہتر بنانے کے لیے آسان پیروی کرنے والی تجاویز اور سبق فراہم کرتا ہے۔ چاہے آپ ایک تجربہ کار پیشہ ور ہوں یا ابتدائی، مائیکل کا بلاگ ان ضروری سافٹ ویئر ٹولز سے زیادہ سے زیادہ فائدہ اٹھانے کے لیے قیمتی بصیرتیں اور عملی مشورہ پیش کرتا ہے۔