Excel UDF పని చేయడం లేదు: సమస్యలు మరియు పరిష్కారాలు

  • దీన్ని భాగస్వామ్యం చేయండి
Michael Brown

ఈ కథనంలో, మీ వర్క్‌బుక్‌లలో అనుకూల ఫంక్షన్‌లను ఉపయోగిస్తున్నప్పుడు మీరు ఎదుర్కొనే సమస్యలను మేము పరిశీలిస్తాము. వాటికి కారణమేమిటో మరియు వాటిని ఎంత సులభంగా పరిష్కరించవచ్చో నేను మీకు చూపించడానికి ప్రయత్నిస్తాను.

ఇక్కడ మనం ఏమి మాట్లాడుతాము:

    ఇంతకుముందు మనం దేని గురించి మాట్లాడుకున్నాము కస్టమ్ ఫంక్షన్, దీన్ని ఎలా సృష్టించాలి మరియు ఉపయోగించాలి. మీరు ముందుగా UDFల ప్రాథమిక పరిజ్ఞానాన్ని రిఫ్రెష్ చేయాలని భావిస్తే, కొంత విరామం తీసుకుని నా మునుపటి కథనాన్ని చూడండి.

    Excel UDF ఎందుకు మళ్లీ లెక్కించబడదు?

    మీరు ఏవైనా మార్పులు చేసినప్పుడు మీ వర్క్‌బుక్, Excel మీ వద్ద ఉన్న ప్రతి ఫార్ములాను మళ్లీ లెక్కించదు. ఇది మార్చబడిన సెల్‌లకు మాత్రమే లింక్ చేయబడిన ఫార్ములాల ఫలితాలను నవీకరిస్తుంది.

    కానీ ఇది ప్రామాణిక Excel ఫంక్షన్‌లకు సంబంధించినది. కస్టమ్ వాటి విషయానికొస్తే, Excel VBA కోడ్‌ని ధృవీకరించదు మరియు కస్టమ్ ఫంక్షన్ ఫలితాన్ని ప్రభావితం చేసే ఇతర సెల్‌లను గుర్తించదు. కాబట్టి, మీరు వర్క్‌బుక్‌లో మార్పులు చేసినప్పుడు మీ అనుకూల ఫార్ములా మారకపోవచ్చు.

    సమస్యను పరిష్కరించడానికి, మీరు Application.Volatile స్టేట్‌మెంట్‌ను ఉపయోగించాల్సి ఉంటుంది. దీన్ని ఎలా వర్తింపజేయాలనే దానిపై దశల వారీ సూచనలను తెలుసుకోవడానికి తదుపరి అధ్యాయాన్ని చూడండి.

    అస్థిర vs నాన్-వాలటైల్ అనుకూల ఫంక్షన్‌లు

    డిఫాల్ట్‌గా, Excelలోని అనుకూల ఫంక్షన్‌లు అస్థిరమైనవి కావు. దీనర్థం UDF అది సూచించే ఏదైనా సెల్‌ల విలువ మారితే మాత్రమే తిరిగి లెక్కించబడుతుంది. కానీ సెల్స్ ఫార్మాట్ అయితే, పేరువర్క్‌షీట్, ఫైల్ పేరు మార్పు, అప్పుడు UDFలో ఎటువంటి మార్పులు జరగవు.

    పదాల నుండి ఉదాహరణలకు మారదాం. ఉదాహరణకు, మీరు మీ వర్క్‌బుక్ పేరును సెల్‌లో వ్రాయాలి. దీన్ని చేయడానికి, మీరు కస్టమ్ ఫంక్షన్‌ని క్రియేట్ చేయండి:

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

    ఇప్పుడు కింది సందర్భాన్ని ఊహించండి. మీరు కస్టమ్ ఫార్ములా =WorkbookName() ని సెల్‌లో వ్రాసి ఫైల్ పేరును పొందారు. కాసేపట్లో, మీరు ఫైల్ పేరు మార్చాలని నిర్ణయించుకున్నారు మరియు దానిని వేరే పేరుతో సేవ్ చేసారు. కానీ మీరు సెల్‌లోని విలువను చూసి అది మారలేదని చూడండి. ఇప్పటికీ పాత ఫైల్ పేరు ఉంది, అది సరైనది కాదు.

    ఈ ఫంక్షన్‌లో ఆర్గ్యుమెంట్‌లు లేనందున, ఫంక్షన్ మళ్లీ లెక్కించబడదు (మీరు వర్క్‌బుక్ పేరును మార్చినప్పటికీ, దాన్ని మూసివేసి, ఆపై మళ్లీ తెరవండి అది).

    గమనిక. మీ ఫైల్‌లోని అన్ని ఫంక్షన్‌లను తిరిగి లెక్కించడానికి, మీరు Ctrl + Alt + F9 సత్వరమార్గాన్ని ఉపయోగించవచ్చు.

    సులభమైన మార్గం ఉందా? వర్క్‌షీట్ మారిన ప్రతిసారీ సూత్రాన్ని మళ్లీ లెక్కించేందుకు, మీకు అదనపు లైన్ కోడ్ అవసరం. మీ ఫంక్షన్ ప్రారంభంలో క్రింది కోడ్ భాగాన్ని అతికించండి:

    అప్లికేషన్.అస్థిర

    కాబట్టి, మీ కోడ్ ఇలా కనిపిస్తుంది:

    ఫంక్షన్ WorkbookName() String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    ఇప్పుడు మీ UDF అస్థిరంగా ఉంది, కాబట్టి వర్క్‌షీట్‌లోని ఏదైనా సెల్ ఉంటే అది స్వయంచాలకంగా తిరిగి లెక్కించబడుతుందితిరిగి లెక్కించబడింది లేదా వర్క్‌బుక్‌లో ఏదైనా మార్పు సంభవించింది. మీరు ఫైల్ పేరును మార్చిన వెంటనే, మీరు ఆ నవీకరణను వెంటనే చూస్తారు.

    గమనిక. దయచేసి చాలా అస్థిర విధులు మీ Excel వేగాన్ని తగ్గించగలవని గుర్తుంచుకోండి. అన్నింటికంటే, సంక్లిష్ట గణనలను నిర్వహించే మరియు పెద్ద డేటా పరిధులలో నిరంతరం పనిచేసే అనేక అనుకూల ఫంక్షన్‌లు ఉన్నాయి.

    అందుకే, అస్థిరతను నిజంగా అవసరమైన చోట మాత్రమే ఉపయోగించమని నేను సిఫార్సు చేస్తున్నాను.

    కస్టమ్ ఫంక్షన్‌లు ఎందుకు అందుబాటులో లేవు

    మీరు కస్టమ్ ఫంక్షన్ పేరులోని మొదటి అక్షరాలను నమోదు చేసినప్పుడు, అది కనిపిస్తుంది ఇన్‌పుట్ సెల్ పక్కన ఉన్న డ్రాప్-డౌన్ జాబితాలో, ప్రామాణిక Excel ఫంక్షన్‌ల వలె.

    అయితే, ఇది ఎల్లప్పుడూ జరగదు. ఏ తప్పులు ఈ పరిస్థితికి కారణం కావచ్చు?

    మీకు Excel 2003-2007 ఉంటే, UDF డ్రాప్‌డౌన్ జాబితాలో ఎప్పుడూ కనిపించదు. అక్కడ మీరు స్టాండర్డ్ ఫంక్షన్‌లను మాత్రమే చూడగలరు.

    కానీ మీరు Excel యొక్క కొత్త వెర్షన్‌ని ఉపయోగిస్తున్నప్పటికీ, మీరు అనుకోకుండా చేసే మరో పొరపాటు ఉంది.

    మీరు చూడండి, కస్టమ్ ఫంక్షన్ తప్పనిసరిగా ఉండాలి. మాడ్యూల్స్ అని పిలువబడే ప్రామాణిక VBA మాడ్యూల్. మీరు ఫంక్షన్ కోడ్‌ను వ్రాయడానికి కొత్త మాడ్యూల్‌ని జోడించినప్పుడు, అన్ని మాడ్యూల్‌లు వ్రాయబడిన మాడ్యూల్స్ ఫోల్డర్ స్వయంచాలకంగా సృష్టించబడుతుంది.

    కానీ కొన్నిసార్లు కొత్త మాడ్యూల్ కాకపోవచ్చు. సృష్టించబడుతోంది. తదుపరి స్క్రీన్‌షాట్‌లో మీరు కస్టమ్ ఫంక్షన్ కోడ్ “మైక్రోసాఫ్ట్ ఎక్సెల్ ఆబ్జెక్ట్స్” మాడ్యూల్‌లో ఉన్నట్లు చూడవచ్చుఈ వర్క్‌బుక్.

    విషయం ఏమిటంటే మీరు వర్క్‌షీట్ లేదా వర్క్‌బుక్ కోడ్ ప్రాంతంలో అనుకూల ఫంక్షన్‌ని ఉంచలేరు. ఈ సందర్భంలో, ఫంక్షన్ పనిచేయదు. అంతేకాకుండా, ఇది ఫంక్షన్ల డ్రాప్‌డౌన్ జాబితాలో కనిపించదు. అందువల్ల, కోడ్ ఎల్లప్పుడూ మాడ్యూల్స్ ఫోల్డర్‌లో ఉండాలి.

    Excel కస్టమ్ ఫంక్షన్ సహాయ వచనం ప్రదర్శించబడదు

    మీరు అతికించినప్పుడు మీకు కనిపించే సూచన మరొక సమస్య సంభవించవచ్చు కస్టమ్ ఫంక్షన్. మీరు ప్రామాణిక ఫంక్షన్‌ని ఉపయోగిస్తే, మీరు ఎల్లప్పుడూ ఫంక్షన్ మరియు దాని వాదనల కోసం టూల్‌టిప్‌ను చూస్తారు. అయితే UDFల సంగతేంటి?

    మీకు చాలా కస్టమ్ ఫంక్షన్‌లు ఉంటే, వాటిలో ప్రతి ఒక్కటి ఏ లెక్కలు చేస్తాయో గుర్తుంచుకోవడం మీకు చాలా కష్టంగా ఉంటుంది. ఏ వాదనలను ఉపయోగించాలో గుర్తుంచుకోవడం మరింత కష్టం. మీ అనుకూల ఫంక్షన్‌ల వివరణను రిమైండర్‌గా కలిగి ఉండటం మంచి ఆలోచన అని నేను భావిస్తున్నాను.

    దీని కోసం, Application.MacroOptions పద్ధతిని ఉపయోగించమని నేను సూచిస్తున్నాను. ఇది ఫంక్షన్ విజార్డ్ విండోలో ఫంక్షన్ మాత్రమే కాకుండా దాని ప్రతి ఆర్గ్యుమెంట్‌ల వివరణను చూపడంలో మీకు సహాయం చేస్తుంది. మీరు ఫార్ములా బార్‌లోని Fx బటన్‌ను క్లిక్ చేసినప్పుడు మీకు ఈ విండో కనిపిస్తుంది.

    మీ UDF లకు అటువంటి సూచనను ఎలా జోడించాలో చూద్దాం. మునుపటి కథనంలో మేము GetMaxBetween కస్టమ్ ఫంక్షన్‌ని చూశాము. ఇది పేర్కొన్న పరిధిలో గరిష్ట సంఖ్యను కనుగొంటుంది మరియు మూడు ఆర్గ్యుమెంట్‌లను తీసుకుంటుంది: సంఖ్యా విలువల పరిధి మరియు గరిష్ట మరియు కనిష్ట విలువకోసం శోధించండి.

    ఇప్పుడు మేము ఈ అనుకూల ఫంక్షన్ కోసం వివరణను జోడిస్తాము. దీన్ని చేయడానికి, Application.MacroOptions ఆదేశాన్ని సృష్టించండి మరియు అమలు చేయండి. GetMaxBetween ఫంక్షన్ కోసం, మీరు కింది ఆదేశాన్ని అమలు చేయవచ్చు:

    Sub RegisterUDF () Dim strFuncName ను String 'పేరుగా మీరు నమోదు చేయాలనుకుంటున్నారు Dim strDescr As String' ఫంక్షన్ యొక్క వివరణ అది మసకబారిన strArgs () స్ట్రింగ్ 'ఫంక్షన్ ఆర్గ్యుమెంట్‌ల వివరణ' వలె ' GetMaxBetween ఫంక్షన్ ReDim strArgs (1 నుండి 3) 'మీ ఫంక్షన్‌లోని ఆర్గ్యుమెంట్‌ల సంఖ్య strFuncName = "GetMaxBetween" strDescr = "నిర్దిష్ట పరిధిలో గరిష్ట సంఖ్య" (1 నిర్దిష్ట పరిధి) = "సంఖ్యా విలువల శ్రేణి" strArgs (2) = "తక్కువ విరామ సరిహద్దు" strArgs (3) = " ఎగువ విరామం అంచు " అప్లికేషన్. మాక్రో ఆప్షన్స్ మాక్రో: = strFuncName, _ వివరణ: = strDescr, _ ArgumentDescriptions: = strArg " నా అనుకూల విధులు " ముగింపు ఉప

    లేదా

    సబ్ రిజిస్టర్UDF () అప్లికేషన్.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "పేర్కొన్న పరిధిలో గరిష్ట సంఖ్య" , _ వర్గం: = "నా అనుకూల విధులు" , _ వాదన వివరణలు: = అర్రే (_ "సంఖ్యా విలువల పరిధి" , _ "తక్కువ విరామం బోర్ der" , _ "ఎగువ విరామం అంచు" ) ముగింపు ఉప

    వేరియబుల్ str FuncName అనేది ఫంక్షన్ పేరు. strDescr - ఫంక్షన్ వివరణ. strArgs వేరియబుల్స్ ప్రతి ఆర్గ్యుమెంట్‌కు సూచనలను కలిగి ఉంటాయి.

    నాల్గవ ఆర్గ్యుమెంట్ ఏమిటి అని మీరు ఆశ్చర్యపోవచ్చుఅప్లికేషన్.మాక్రో ఆప్షన్స్. ఈ ఐచ్ఛిక వాదన వర్గం అని పేరు పెట్టబడింది మరియు మా కస్టమ్ GetMaxBetween () ఫంక్షన్‌లో ఉంచబడే Excel ఫంక్షన్‌ల తరగతిని సూచిస్తుంది. మీరు ఇప్పటికే ఉన్న ఏవైనా వర్గాల తర్వాత దీనికి పేరు పెట్టవచ్చు: Math & ; ట్రిగ్, స్టాటిస్టికల్, లాజికల్ మొదలైనవి. మీరు సృష్టించే ఫంక్షన్‌లను ఉంచే కొత్త వర్గానికి మీరు పేరును పేర్కొనవచ్చు. మీరు కేటగిరీ ఆర్గ్యుమెంట్‌ని ఉపయోగించకుంటే, కస్టమ్ ఫంక్షన్ ఆటోమేటిక్‌గా “యూజర్ డిఫైన్డ్” కేటగిరీలో ఉంచబడుతుంది.

    ఫంక్షన్ కోడ్‌ను మాడ్యూల్ విండోలో అతికించండి:

    తర్వాత “రన్” బటన్‌పై క్లిక్ చేయండి. మీ GetMaxBetween() ఫంక్షన్‌తో Fx బటన్‌ను ఉపయోగించడం కోసం కమాండ్ అన్ని సెట్టింగ్‌లను నిర్వహిస్తుంది.

    మీరు <ని ఉపయోగించి సెల్‌లో ఫంక్షన్‌ను ఇన్సర్ట్ చేయడానికి ప్రయత్నిస్తే 6>ఇన్సర్ట్ ఫంక్షన్ సాధనం, మీ GetMaxBetween ఫంక్షన్ "నా అనుకూల విధులు" వర్గంలో ఉందని మీరు చూస్తారు:

    మీరు సెల్‌లో ఫంక్షన్ పేరును టైప్ చేయడం ప్రారంభించవచ్చు మరియు మీరు ఎంచుకోవలసిన ఫంక్షన్‌ల డ్రాప్‌డౌన్ జాబితాలో మీ అనుకూల ఫంక్షన్‌ని చూస్తారు.

    తర్వాత ఫంక్షన్ విజార్డ్‌కి కాల్ చేయండి Fx బటన్‌తో .

    చిట్కా. మీరు ఫంక్షన్ విజార్డ్‌ను తెరవడానికి CRTL + A కీ కలయికను కూడా ఉపయోగించవచ్చు.

    ఫంక్షన్ విజార్డ్ విండోలో మీరు మీ ఫంక్షన్ యొక్క వివరణను అలాగే మొదటి ఆర్గ్యుమెంట్ కోసం సూచనను చూస్తారు. మీరు మీ కర్సర్‌ను దానిపై ఉంచినట్లయితేరెండవ లేదా మూడవ వాదన, మీరు వాటి కోసం సూచనలను కూడా చూస్తారు.

    మీరు ఈ సూచనల వచనాన్ని మార్చాలనుకుంటే, strDescr మరియు strArgs<విలువలను మార్చండి RegisterUDF () కోడ్‌లో 7> వేరియబుల్స్. ఆపై RegisterUDF () ఆదేశాన్ని మళ్లీ అమలు చేయండి.

    మీరు చేసిన అన్ని సెట్టింగ్‌లను రద్దు చేసి, ఫంక్షన్ వివరణను క్లియర్ చేయాలనుకుంటే, ఈ కోడ్‌ను అమలు చేయండి:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    మీరు కస్టమ్ ఫంక్షన్‌ను నమోదు చేసినప్పుడు సూచనను పొందడానికి మరో మార్గం ఉంది. ఫంక్షన్ పేరును నమోదు చేసి, ఆపై Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A నొక్కండి

    మీరు అన్ని ఫంక్షన్ ఆర్గ్యుమెంట్‌ల జాబితాను చూస్తారు:

    దురదృష్టవశాత్తూ, ఇక్కడ మీరు ఫంక్షన్ యొక్క వివరణ మరియు దాని వాదనలను చూడలేరు. అయితే వాదనల పేర్లు చాలా సమాచారంగా ఉంటే, అవి కూడా ఉపయోగకరంగా ఉండవచ్చు. అయినప్పటికీ, ఇది ఏమీ కంటే మెరుగైనది :)

    స్టాండర్డ్ Excel ఫంక్షన్‌ల వలె పని చేసే UDFల కోసం ఇంటెలిసెన్స్‌ని రూపొందించడానికి కొంచెం ఎక్కువ పని పడుతుంది. దురదృష్టవశాత్తూ, Microsoft ఏ ఎంపికలను అందించదు. ప్రస్తుతం అందుబాటులో ఉన్న ఏకైక పరిష్కారం Excel-DNA IntelliSense పొడిగింపు. మీరు డెవలపర్ వెబ్‌సైట్‌లో మరింత సమాచారాన్ని కనుగొనవచ్చు.

    మీ అనుకూల ఫంక్షన్ పని చేయనప్పుడు లేదా పని చేయనప్పుడు సమస్యలను పరిష్కరించడంలో ఈ మార్గదర్శకాలు మీకు సహాయపడతాయని ఆశిస్తున్నాముమీరు కోరుకున్నట్లు పని చేయండి. అయినప్పటికీ, మీ UDF ఇప్పటికీ పని చేయడంలో విఫలమైతే, దయచేసి వ్యాఖ్యల విభాగంలో మీ సమస్యను ఖచ్చితంగా వివరించండి. మేము దానిని గుర్తించడానికి మరియు మీ కోసం పరిష్కారాన్ని కనుగొనడానికి ప్రయత్నిస్తాము ;)

    మైఖేల్ బ్రౌన్ సాఫ్ట్‌వేర్ సాధనాలను ఉపయోగించి సంక్లిష్ట ప్రక్రియలను సరళీకృతం చేయాలనే అభిరుచితో అంకితమైన సాంకేతిక ఔత్సాహికుడు. టెక్ పరిశ్రమలో దశాబ్దానికి పైగా అనుభవంతో, అతను మైక్రోసాఫ్ట్ ఎక్సెల్ మరియు ఔట్‌లుక్‌తో పాటు గూగుల్ షీట్‌లు మరియు డాక్స్‌లో తన నైపుణ్యాలను మెరుగుపరుచుకున్నాడు. మైఖేల్ యొక్క బ్లాగ్ అతని జ్ఞానాన్ని మరియు నైపుణ్యాన్ని ఇతరులతో పంచుకోవడానికి అంకితం చేయబడింది, ఉత్పాదకత మరియు సామర్థ్యాన్ని మెరుగుపరచడం కోసం సులభంగా అనుసరించగల చిట్కాలు మరియు ట్యుటోరియల్‌లను అందిస్తుంది. మీరు అనుభవజ్ఞుడైన ప్రొఫెషనల్ లేదా అనుభవశూన్యుడు అయినా, మైఖేల్ యొక్క బ్లాగ్ ఈ ముఖ్యమైన సాఫ్ట్‌వేర్ సాధనాలను ఎక్కువగా పొందడానికి విలువైన అంతర్దృష్టులను మరియు ఆచరణాత్మక సలహాలను అందిస్తుంది.