Excel UDF کار نه کوي: ستونزې او حلونه

  • دا شریک کړه
Michael Brown

په دې مقاله کې، موږ به هغه مسلو ته یو نظر واچوو چې تاسو به یې په خپل کاري کتابونو کې د دودیز افعال کارولو په وخت کې ورسره مخ شئ. زه به هڅه وکړم چې تاسو ته وښیم چې د دوی لاملونه څه دي او څومره په اسانۍ سره حل کیدی شي.

دلته هغه څه دي چې موږ به یې په اړه وغږیږو:

    3>

    مخکې مو د څه شی په اړه خبرې وکړې. دودیز فعالیت دا دی چې څنګه یې رامینځته او کارول کیږي. که تاسو داسې احساس کوئ چې تاسو اړتیا لرئ مخکې له دې د UDFs لومړنۍ پوهه تازه کړئ، یو وقفه واخلئ او زما پخوانۍ مقاله وګورئ.

    ولې د Excel UDF بیا حساب نه کوي؟

    کله چې تاسو کوم بدلون راوړئ ستاسو کاري کتاب، Excel به هر هغه فورمول چې تاسو هلته لرئ بیا حساب نه کوي. دا به د هغو فورمولونو پایلې تازه کړي چې یوازې د بدل شوي حجرو سره تړلي دي.

    مګر دا د معیاري Excel افعال پورې اړه لري. لکه څنګه چې د دودیز لپاره، ایکسل نشي کولی د VBA کوډ تایید کړي او نور حجرې وپیژني چې کولی شي د دودیز فعالیت پایله هم اغیزه وکړي. له همدې امله، ستاسو دودیز فورمول ممکن بدلون ونه کړي کله چې تاسو په کاري کتاب کې بدلون راوړئ.

    د مسلې د حل لپاره، تاسو به یوازې د Application.Volatile بیان کارولو ته اړتیا ولرئ. بل څپرکی وګورئ چې د دې پلي کولو څرنګوالي په اړه ګام په ګام لارښوونې زده کړئ.

    بې ثباته vs غیر بې ثباته دودیز افعال

    د ډیفالټ په توګه، په Excel کې دودیز فعالیتونه بې ثباته ندي. دا پدې مانا ده چې UDF یوازې بیا محاسبه کیږي که چیرې د هرې حجرې ارزښت بدلون ته راجع شي. مګر که د حجرو بڼه، د نوم نومکاري پاڼه، د فایل نوم بدلوي، نو بیا به په UDF کې هیڅ بدلون نه راځي.

    راځئ چې له کلمو څخه مثالونو ته لاړ شو. د مثال په توګه، تاسو اړتیا لرئ چې د خپل کاري کتاب نوم په یوه حجره کې ولیکئ. د دې کولو لپاره، تاسو یو دودیز فنکشن جوړ کړئ:

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

    اوس لاندې قضیه تصور کړئ. تاسو په حجره کې دودیز فورمول =WorkbookName() لیکلی او هلته یې د فایل نوم ترلاسه کړ. په یو څه وخت کې، تاسو پریکړه وکړه چې د فایل نوم بدل کړئ او د بل نوم سره یې خوندي کړئ. مګر تاسو په حجره کې ارزښت وګورئ او وګورئ چې دا بدل شوی نه دی. اوس هم د یو زوړ فایل نوم شته چې اوس سم نه دی.

    ځکه چې په دې فنکشن کې هیڅ دلیل نشته، فنکشن بیا نه حسابیږي (حتی که تاسو د کاري کتاب نوم بدل کړئ، بند کړئ، او بیا خلاص کړئ دا).

    یادونه. ستاسو په فایل کې د ټولو دندو بیا محاسبه کولو لپاره، تاسو کولی شئ د Ctrl + Alt + F9 شارټ کټ وکاروئ.

    ایا کومه اسانه لار شته؟ د دې لپاره چې د فورمول بیا حساب کول هرکله چې د کاري پاڼې بدل شي، تاسو د کوډ اضافي کرښې ته اړتیا لرئ. د خپل فعالیت په پیل کې لاندې کوډ پیسټ کړئ:

    Application.Volatile

    نو، ستاسو کوډ به داسې ښکاري:

    فعالیت د ورک بک نومبیا حساب شوی یا په کاري کتاب کې کوم بدلون راغلی. هرڅومره ژر چې تاسو د فایل نوم بدل کړئ ، تاسو به سمدستي هغه تازه وګورئ.

    یادونه. مهرباني وکړئ په یاد ولرئ چې ډیری بې ثباته دندې کولی شي ستاسو اکسل ورو کړي. په هرصورت، ډیری دودیز فعالیتونه شتون لري چې پیچلي محاسبې ترسره کوي او په دوامداره توګه د لوی ډیټا رینجونو کې کار کوي.

    له دې امله، زه یوازې هغه ځای کې د بې ثباتۍ کارولو وړاندیز کوم چې واقعیا ورته اړتیا وي.

    ولې دودیز فنکشن شتون نلري

    په ډراپ-ډاون لیست کې د ان پټ حجرې تر څنګ، لکه د معیاري Excel افعال په څیر.

    په هرصورت، دا تل نه پیښیږي. کومې تېروتنې د دې وضعیت لامل کیدی شي؟

    که تاسو 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 () د String په توګه 'د فنکشن دلیلونو توضیحات' ثبت کړئ GetMaxBetween فنکشن ReDim strArgs (1 څخه تر 3) 'ستاسو په فنکشن کې د دلیلونو شمیر strFuncName = "GetMaxBetween" strDescr = "په ټاکل شوي حد کې اعظمي شمیره = strArgs = (1) "د عددي ارزښتونو لړۍ" strArgs (2) = "د ټیټ وقفې سرحد" strArgs (3) = "د پورتنۍ وقفې سرحد" غوښتنلیک.MacroOptions میکرو: = strFuncName، _ توضیحات: = strDescr، _ دلیل توضیحات: = strArgs: = _ Cas "زما دودیز کارونه" پای Sub

    یا

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "په ټاکلي حد کې اعظمي شمیره" , _ کټګوري: = "زما دودیز افعال" , _ د دلیل توضیحات: = سرې (_ "د عددي ارزښتونو سلسله" , _ "لږ وقفه بور der" , _ "د پورتنۍ وقفې سرحد" ) End Sub

    Variable str FuncName د فنکشن نوم دی. strDescr - د فعالیت توضیحات. د strArgs متغیرات د هر دلیل لپاره اشارې لري.

    تاسو شاید حیران شئ چې څلورم دلیل څه دی؟Application.MacroOptions. دا اختیاري دلیل کټګوري نومول شوی او د ایکسل افعال ټولګي ته اشاره کوي چې زموږ دودیز GetMaxBetween () فنکشن به پکې ځای په ځای شي. تاسو کولی شئ دا د هرې موجوده کټګوریو وروسته نومولی شئ: ریاضی او amp ; ټریګ، احصایوي، منطقي، او داسې نور. تاسو کولی شئ د نوې کټګورۍ لپاره نوم مشخص کړئ چې تاسو به یې هغه فعالیتونه ځای په ځای کړئ چې تاسو یې جوړ کړئ. که تاسو د کټګورۍ دلیل نه کاروئ، نو دودیز فعالیت به په اوتومات ډول د "کارونکي تعریف شوي" کټګورۍ کې ځای په ځای شي.

    د فعالیت کوډ د ماډل کړکۍ کې پیسټ کړئ:

    بیا د "چلولو" تڼۍ باندې کلیک وکړئ. کمانډ به ستاسو د GetMaxBetween() فنکشن سره د Fx تڼۍ کارولو لپاره ټول تنظیمات ترسره کړي.

    که تاسو هڅه وکړئ د په کارولو سره حجرې ته فنکشن داخل کړئ. 6>Insert Function Tool، تاسو به وګورئ چې دلته ستاسو GetMaxBetween فنکشن د "زما دودیز افعال" کټګورۍ کې دی:

    تاسو په ساده ډول په حجره کې د فنکشن نوم ټایپ کول پیل کولی شئ او تاسو به خپل دودیز فنکشن د فنکشنونو په ډراپ ډاون لیست کې وګورئ چې له دې څخه غوره کول دي.

    بیا فکشن وزرډ ته زنګ ووهئ د Fx تڼۍ سره.

    لارښوونه. تاسو کولی شئ د CRTL + A کلیدي ترکیب هم وکاروئ ترڅو د فنکشن وزرډ خلاص کړئ.

    د فکشن وزرډ کړکۍ کې به تاسو د خپل فعالیت توضیحات وګورئ، او همدارنګه د لومړي دلیل لپاره یو اشاره. که تاسو خپل کرسر په سر کې ځای په ځای کړئدوهم یا دریم دلیل، تاسو به د دوی لپاره اشارې هم وګورئ.

    که تاسو غواړئ د دې اشارو متن بدل کړئ، د strDescr او strArgs په رجسټر یو ډی ایف () کوډ کې تغیرات. بیا د RegisterUDF () کمانډ بیا پرمخ وړئ.

    که تاسو غواړئ ټول جوړ شوي تنظیمات بیرته راوباسئ او د فعالیت توضیحات پاک کړئ ، دا کوډ چل کړئ:

    Sub UnregisterUDF () Application.MacroOptions میکرو: = "GetMaxBetween" , _ توضیحات: = خالي , ArgumentDescriptions: = خالی , کټګوري: = د پای پای فرعي خالي

    کله چې تاسو دودیز فعالیت ته ننوځئ نو د اشارې ترلاسه کولو لپاره یوه بله لاره شتون لري. د فنکشن نوم دننه کړئ او بیا د Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    فشار ورکړئ تاسو به د ټولو فنکشن دلیلونو لیست وګورئ:

    له بده مرغه، دلته به تاسو د فنکشن توضیحات او دلیلونه ونه ګورئ. مګر که د دلیلونو نومونه خورا معلوماتي وي، نو ممکن دوی هم ګټور وي. بیا هم، دا د هیڅ شی څخه غوره دی :)

    دا به د UDFs لپاره د هوښیارتیا رامینځته کولو لپاره یو څه نور کار وکړي چې د معیاري Excel افعال په څیر کار کوي. له بده مرغه، مایکروسافټ هیڅ اختیار نه ورکوي. یوازینی حل چې اوس مهال شتون لري د Excel-DNA IntelliSense توسیع دی. تاسو کولی شئ د پراختیا کونکي په ویب پاڼه کې نور معلومات ومومئ.

    هیله ده، دا لارښوونې به تاسو سره د ستونزو حل کولو کې مرسته وکړي کله چې ستاسو دودیز فعالیت کار نه کوي یا نه کويلکه څنګه چې تاسو غواړئ کار وکړئ. که په هرصورت، ستاسو UDF لاهم کار کولو کې پاتې راغلی، مهرباني وکړئ خپله مسله د تبصرو برخه کې په سمه توګه بیان کړئ. موږ به هڅه وکړو چې دا معلومه کړو او ستاسو لپاره د حل لاره ومومئ؛)

مایکل براون د ټیکنالوژۍ وقف شوی لیوال دی چې د سافټویر وسیلو په کارولو سره د پیچلو پروسو ساده کولو لپاره لیوالتیا لري. د ټیک صنعت کې د یوې لسیزې څخه ډیرې تجربې سره، هغه خپل مهارتونه په مایکروسافټ ایکسل او آؤټ لک کې، او همدارنګه د ګوګل شیټس او اسنادو کې لوړ کړي دي. د مایکل بلاګ د نورو سره د هغه پوهه او تخصص شریکولو ته وقف شوی دی، د تولید او موثریت د ښه کولو لپاره د تعقیب لپاره اسانه لارښوونې او لارښوونې چمتو کوي. که تاسو تجربه لرونکی مسلکي یاست یا پیل کونکی یاست ، د مایکل بلاګ د دې اړین سافټویر وسیلو څخه خورا ډیر ترلاسه کولو لپاره ارزښتناک لیدونه او عملي مشورې وړاندې کوي.