એક્સેલ યુડીએફ કામ કરતું નથી: સમસ્યાઓ અને ઉકેલો

  • આ શેર કરો
Michael Brown

આ લેખમાં, અમે તમારી વર્કબુકમાં કસ્ટમ ફંક્શનનો ઉપયોગ કરતી વખતે તમને જે સમસ્યાઓનો સામનો કરવો પડી શકે છે તેના પર એક નજર નાખીશું. હું તમને તે બતાવવાનો પ્રયત્ન કરીશ કે તે શું કારણ બની રહ્યું છે અને તે કેટલી સરળતાથી ઉકેલી શકાય છે.

અહીં અમે જેના વિશે વાત કરીશું તે છે:

    અગાઉ અમે શું વિશે વાત કરી હતી કસ્ટમ ફંક્શન છે, તેને કેવી રીતે બનાવવું અને તેનો ઉપયોગ કરવો. જો તમને લાગે કે તમારે પહેલા UDF ના મૂળભૂત જ્ઞાનને તાજું કરવાની જરૂર છે, તો થોડો વિરામ લો અને મારો પાછલો લેખ જુઓ.

    શા માટે Excel UDF પુનઃગણતરી કરતું નથી?

    જ્યારે તમે તેમાં કોઈ ફેરફાર કરો છો તમારી વર્કબુક, એક્સેલ તમારી પાસેના દરેક ફોર્મ્યુલાની પુનઃગણતરી કરશે નહીં. તે ફક્ત બદલાયેલ કોષો સાથે જોડાયેલા હોય તેવા ફોર્મ્યુલા માટેના પરિણામોને અપડેટ કરશે.

    પરંતુ આ પ્રમાણભૂત એક્સેલ ફંક્શનને લગતું છે. કસ્ટમની વાત કરીએ તો, એક્સેલ VBA કોડને માન્ય કરી શકતું નથી અને અન્ય કોષોને ઓળખી શકતું નથી જે કસ્ટમ ફંક્શનના પરિણામને પણ અસર કરી શકે છે. તેથી, જ્યારે તમે વર્કબુકમાં ફેરફાર કરો છો ત્યારે તમારું કસ્ટમ ફોર્મ્યુલા બદલાઈ શકશે નહીં.

    સમસ્યાને ઠીક કરવા માટે, તમારે ફક્ત Application.Volatile સ્ટેટમેન્ટનો ઉપયોગ કરવાની જરૂર પડશે. તેને કેવી રીતે લાગુ કરવું તે અંગે પગલું-દર-પગલાં સૂચનો જાણવા માટે આગળનું પ્રકરણ તપાસો.

    અસ્થિર વિ બિન-અસ્થિર કસ્ટમ ફંક્શન્સ

    ડિફૉલ્ટ રૂપે, એક્સેલમાં કસ્ટમ ફંક્શન અસ્થિર નથી. આનો અર્થ એ છે કે UDF ની પુનઃગણતરી ત્યારે જ થાય છે જ્યારે તે કોઈપણ કોષની કિંમતમાં ફેરફાર કરે છે. પરંતુ જો કોષોનું ફોર્મેટ, નામવર્કશીટ, ફાઈલનું નામ બદલાય છે, પછી UDF માં કોઈ ફેરફાર થશે નહીં.

    ચાલો શબ્દોથી ઉદાહરણો પર જઈએ. દાખલા તરીકે, તમારે સેલમાં તમારી વર્કબુકનું નામ લખવાની જરૂર છે. આ કરવા માટે, તમે કસ્ટમ ફંક્શન બનાવો:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name એન્ડ ફંક્શન

    હવે નીચેના કેસની કલ્પના કરો. તમે સેલમાં કસ્ટમ ફોર્મ્યુલા =WorkbookName() લખ્યું અને ત્યાં ફાઇલનું નામ મળ્યું. થોડીવારમાં, તમે ફાઇલનું નામ બદલવાનું નક્કી કર્યું અને તેને અલગ નામથી સાચવ્યું. પરંતુ તમે સેલમાં મૂલ્ય જુઓ અને જુઓ કે તે બદલાયું નથી. હજી પણ જૂની ફાઇલનું નામ છે જે હવે યોગ્ય નથી.

    આ ફંક્શનમાં કોઈ દલીલો ન હોવાથી, ફંક્શનની પુનઃ ગણતરી કરવામાં આવતી નથી (ભલે તમે વર્કબુકનું નામ બદલો, તેને બંધ કરો અને પછી ફરીથી ખોલો. તે).

    નોંધ. તમારી ફાઇલમાંના તમામ કાર્યોની પુનઃ ગણતરી કરવા માટે, તમે Ctrl + Alt + F9 શોર્ટકટનો ઉપયોગ કરી શકો છો.

    શું કોઈ સરળ રસ્તો છે? જ્યારે પણ વર્કશીટ બદલાય છે ત્યારે ફોર્મ્યુલા પુનઃગણતરી કરવા માટે, તમારે કોડની વધારાની લાઇનની જરૂર છે. તમારા ફંક્શનની શરૂઆતમાં કોડના નીચેના ભાગને પેસ્ટ કરો:

    Application.Volatile

    તેથી, તમારો કોડ આના જેવો દેખાશે:

    ફંક્શન WorkbookName() String Application.Wolatile WorkbookName = ThisWorkbook.Name એન્ડ ફંક્શન

    હવે તમારું UDF અસ્થિર છે, તેથી જો વર્કશીટમાં કોઈપણ કોષ હોય તો તે આપમેળે પુનઃગણતરી કરવામાં આવશે.પુનઃગણતરી કરવામાં આવી છે અથવા વર્કબુકમાં કોઈ ફેરફાર થયો છે. જેમ તમે ફાઇલનું નામ બદલો છો, તમે તરત જ તે અપડેટ જોશો.

    નોંધ. કૃપા કરીને ધ્યાનમાં રાખો કે ઘણા બધા અસ્થિર કાર્યો તમારા એક્સેલને ધીમું કરી શકે છે. છેવટે, ત્યાં ઘણા બધા કસ્ટમ ફંક્શન્સ છે જે જટિલ ગણતરીઓ કરે છે અને મોટા ડેટા રેન્જ પર સતત કાર્ય કરે છે.

    તેથી, હું વોલેટિલિટીનો ઉપયોગ માત્ર ત્યાં જ કરવાની ભલામણ કરું છું જ્યાં તેની ખરેખર જરૂર હોય.

    કસ્ટમ ફંક્શન્સ શા માટે ઉપલબ્ધ નથી

    જ્યારે તમે કસ્ટમ ફંક્શનના નામના પ્રથમ અક્ષરો દાખલ કરો છો, ત્યારે તે દેખાય છે ઇનપુટ સેલની બાજુમાં ડ્રોપ-ડાઉન સૂચિમાં, પ્રમાણભૂત એક્સેલ ફંક્શન્સની જેમ.

    જો કે, આ હંમેશા થતું નથી. કઈ ભૂલો આ પરિસ્થિતિનું કારણ બની શકે છે?

    જો તમારી પાસે એક્સેલ 2003-2007 છે, તો UDF ક્યારેય ડ્રોપડાઉન સૂચિમાં દેખાતું નથી. ત્યાં તમે માત્ર માનક ફંક્શન જ જોઈ શકો છો.

    પરંતુ જો તમે એક્સેલના નવા વર્ઝનનો ઉપયોગ કરી રહ્યાં હોવ તો પણ, તમે આકસ્મિક રીતે બીજી ભૂલ કરી શકો છો.

    તમે જુઓ, કસ્ટમ ફંક્શન તેમાં હોવું જોઈએ. મોડ્યુલ્સ નામનું પ્રમાણભૂત VBA મોડ્યુલ. જ્યારે તમે ફંક્શન કોડ લખવા માટે નવું મોડ્યુલ ઉમેરો છો, ત્યારે એક મોડ્યુલ્સ ફોલ્ડર આપોઆપ બની જાય છે જેમાં બધા મોડ્યુલ લખેલા હોય છે.

    પરંતુ ક્યારેક એવું બને છે કે નવું મોડ્યુલ લખવામાં આવતું નથી. બનાવવામાં આવે છે. આગલા સ્ક્રીનશૉટ પર તમે જોઈ શકો છો કે કસ્ટમ ફંક્શન કોડ "માઈક્રોસોફ્ટ એક્સેલ ઑબ્જેક્ટ્સ" મોડ્યુલમાં છે.આ વર્કબુક.

    મુદ્દો એ છે કે તમે વર્કશીટ અથવા વર્કબુકના કોડ એરિયામાં કસ્ટમ ફંક્શન મૂકી શકતા નથી. આ કિસ્સામાં, કાર્ય કામ કરશે નહીં. વધુમાં, તે કાર્યોની ડ્રોપડાઉન સૂચિમાં દેખાશે નહીં. તેથી, કોડ હંમેશા ફોલ્ડર મોડ્યુલ્સ માં હોવો જોઈએ.

    એક્સેલ કસ્ટમ ફંક્શન હેલ્પ ટેક્સ્ટ પ્રદર્શિત થતું નથી

    બીજી સમસ્યા આવી શકે છે જે તમે પેસ્ટ કરો ત્યારે તમે જુઓ છો તે સંકેત છે. વૈવિધ્યપૂર્ણ કાર્ય. જો તમે પ્રમાણભૂત ફંક્શનનો ઉપયોગ કરો છો, તો તમે હંમેશા ફંક્શન અને તેની દલીલો માટે ટૂલટિપ જોશો. પરંતુ UDF વિશે શું?

    જો તમારી પાસે ઘણાં બધાં કસ્ટમ ફંક્શન્સ છે, તો તમારા માટે એ યાદ રાખવું અત્યંત મુશ્કેલ હશે કે તેમાંથી દરેક કઈ ગણતરી કરે છે. કઈ દલીલોનો ઉપયોગ કરવો તે યાદ રાખવું વધુ મુશ્કેલ હશે. મને લાગે છે કે રિમાઇન્ડર તરીકે તમારા કસ્ટમ ફંક્શન્સનું વર્ણન રાખવું એ સારો વિચાર હશે.

    આ માટે, હું Application.MacroOptions પદ્ધતિનો ઉપયોગ કરવાનું સૂચન કરીશ. તે તમને ફંક્શન વિઝાર્ડ વિન્ડોમાં માત્ર ફંક્શન જ નહીં પણ તેની દરેક દલીલોનું વર્ણન બતાવવામાં મદદ કરશે. જ્યારે તમે ફોર્મ્યુલા બારમાં Fx બટન પર ક્લિક કરો છો ત્યારે તમને આ વિન્ડો દેખાશે.

    ચાલો જોઈએ કે તમારા UDF માં આવો સંકેત કેવી રીતે ઉમેરવો. અગાઉના લેખમાં આપણે GetMaxBetween કસ્ટમ ફંક્શન જોયું. તે ઉલ્લેખિત શ્રેણીમાં મહત્તમ સંખ્યા શોધે છે અને ત્રણ દલીલો લે છે: સંખ્યાત્મક મૂલ્યોની શ્રેણી, અને મહત્તમ અને લઘુત્તમ મૂલ્યમાટે શોધો.

    હવે અમે આ કસ્ટમ ફંક્શન માટે વર્ણન ઉમેરીશું. આ કરવા માટે, Application.MacroOptions આદેશ બનાવો અને ચલાવો. GetMaxBetween ફંક્શન માટે, તમે નીચેનો આદેશ ચલાવી શકો છો:

    Sub RegisterUDF () Dim strFuncName as String 'તમે જે ફંક્શનને ડિમ strDescr એ સ્ટ્રિંગ તરીકે રજીસ્ટર કરવા માંગો છો તેનું નામ' ફંક્શનનું વર્ણન સ્ટ્રિંગ ડિમ કરો "સંખ્યાત્મક મૂલ્યોની શ્રેણી" strArgs (2) = "નીચલી અંતરાલ સરહદ" strArgs (3) = "ઉચ્ચ અંતરાલ સરહદ" એપ્લિકેશન.MacroOptions મેક્રો: = strFuncName, _ વર્ણન: = strDescr, _ ArgumentDescriptions: = strArgs, = _ Category "મારા કસ્ટમ ફંક્શન્સ" અંત સબ

    અથવા

    સબ રજીસ્ટરયુડીએફ () એપ્લિકેશન. મેક્રોઓપ્શન મેક્રો: = "GetMaxBetween" , _ વર્ણન: = "ઉલ્લેખિત શ્રેણીમાં મહત્તમ સંખ્યા" , _ શ્રેણી: = "મારી કસ્ટમ કાર્યો" , _ દલીલ વર્ણન: = એરે (_ "સંખ્યાત્મક મૂલ્યોની શ્રેણી" , _ "લોઅર ઇન્ટરવલ બોર der" , _ "અપર ઇન્ટરવલ બોર્ડર" ) એન્ડ સબ

    વેરીએબલ str FuncName એ ફંક્શનનું નામ છે. strDescr - કાર્ય વર્ણન. strArgs ચલોમાં દરેક દલીલ માટે સંકેતો હોય છે.

    તમને આશ્ચર્ય થશે કે ચોથી દલીલ શું છેએપ્લિકેશન.મેક્રોઓપ્શન્સ. આ વૈકલ્પિક દલીલને કેટેગરી નામ આપવામાં આવ્યું છે અને તે એક્સેલ ફંક્શનના વર્ગને સૂચવે છે કે જેમાં અમારું કસ્ટમ GetMaxBetween () ફંક્શન મૂકવામાં આવશે. તમે તેને હાલની કોઈપણ કેટેગરીઝ પછી નામ આપી શકો છો: Math & ; ટ્રિગ, સ્ટેટિસ્ટિકલ, લોજિકલ, વગેરે. તમે નવી કેટેગરી માટે નામનો ઉલ્લેખ કરી શકો છો જેમાં તમે બનાવેલા ફંક્શન્સ મૂકશો. જો તમે કેટેગરી દલીલનો ઉપયોગ કરતા નથી, તો કસ્ટમ ફંક્શન આપમેળે “યુઝર ડિફાઈન્ડ” કેટેગરીમાં મૂકવામાં આવશે.

    ફંક્શન કોડને મોડ્યુલ વિન્ડોમાં પેસ્ટ કરો:

    પછી "રન" બટન પર ક્લિક કરો. આદેશ તમારા GetMaxBetween() ફંક્શન સાથે Fx બટનનો ઉપયોગ કરવા માટે તમામ સેટિંગ્સ કરશે.

    જો તમે <નો ઉપયોગ કરીને સેલમાં ફંક્શન દાખલ કરવાનો પ્રયાસ કરો છો. 6>Insert Function ટૂલ, તમે જોશો કે તમારું GetMaxBetween ફંક્શન "My Custom Functions" કેટેગરીમાં છે:

    તમે સેલમાં ફંક્શનનું નામ લખવાનું શરૂ કરી શકો છો અને તમે પસંદ કરવા માટેના ફંક્શન્સની ડ્રોપડાઉન સૂચિમાં તમારું કસ્ટમ ફંક્શન જોશો.

    પછી ફંક્શન વિઝાર્ડને કૉલ કરો Fx બટન સાથે.

    ટીપ. તમે ફંક્શન વિઝાર્ડ ખોલવા માટે કી સંયોજન CRTL + A નો પણ ઉપયોગ કરી શકો છો.

    ફંક્શન વિઝાર્ડ વિન્ડોમાં તમે તમારા કાર્યનું વર્ણન, તેમજ પ્રથમ દલીલ માટે સંકેત જોશો. જો તમે તમારા કર્સરને ઉપર મૂકો છોબીજી કે ત્રીજી દલીલ, તમે તેમના માટે સંકેતો પણ જોશો.

    જો તમે આ સંકેતોનું લખાણ બદલવા માંગતા હો, તો strDescr અને strArgs<ની કિંમતો બદલો રજિસ્ટરયુડીએફ () કોડમાં 7> ચલ. પછી ફરીથી રજિસ્ટરયુડીએફ () આદેશ ચલાવો.

    જો તમે બનાવેલ તમામ સેટિંગ્સને પૂર્વવત્ કરવા માંગતા હો અને કાર્ય વર્ણનને સાફ કરવા માંગતા હો, તો આ કોડ ચલાવો:

    સબ અનરજિસ્ટરયુડીએફ () Application.MacroOptions Macro: = "GetMaxBetween" , _ વર્ણન: = Empty , ArgumentDescriptions: = Empty , શ્રેણી: = Empty End Sub

    જ્યારે તમે કસ્ટમ ફંક્શન દાખલ કરો છો ત્યારે સંકેત મેળવવાની એક વધુ રીત છે. ફંક્શનનું નામ દાખલ કરો અને પછી Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    તમે ફંક્શનની તમામ દલીલોની સૂચિ જોશો:

    કમનસીબે, અહીં તમે ફંક્શન અને તેની દલીલોનું વર્ણન જોઈ શકશો નહીં. પરંતુ જો દલીલોના નામ ખૂબ માહિતીપ્રદ છે, તેથી તે પણ મદદરૂપ થઈ શકે છે. તેમ છતાં, તે કંઈ કરતાં વધુ સારું છે :)

    તે UDF માટે ઇન્ટેલિસન્સ બનાવવા માટે થોડું વધુ કામ લેશે જે માનક એક્સેલ ફંક્શન્સની જેમ કામ કરે છે. કમનસીબે, Microsoft કોઈપણ વિકલ્પો પ્રદાન કરતું નથી. હાલમાં ઉપલબ્ધ એકમાત્ર ઉકેલ એક્સેલ-ડીએનએ ઇન્ટેલીસેન્સ એક્સ્ટેંશન છે. તમે ડેવલપરની વેબસાઈટ પર વધુ માહિતી મેળવી શકો છો.

    આશા છે કે, જ્યારે તમારું કસ્ટમ ફંક્શન કામ કરતું નથી અથવા કામ કરતું નથી ત્યારે આ દિશાનિર્દેશો તમને સમસ્યાઓ ઉકેલવામાં મદદ કરશેતમે ઈચ્છો તેમ કામ કરો. જો તેમ છતાં, તમારું UDF હજુ પણ કામ કરવામાં નિષ્ફળ જાય, તો કૃપા કરીને ટિપ્પણીઓ વિભાગમાં તમારી સમસ્યાનું ચોક્કસ વર્ણન કરો. અમે તેને શોધવાનો પ્રયત્ન કરીશું અને તમારા માટે ઉકેલ શોધીશું ;)

    માઈકલ બ્રાઉન સોફ્ટવેર ટૂલ્સનો ઉપયોગ કરીને જટિલ પ્રક્રિયાઓને સરળ બનાવવાના જુસ્સા સાથે સમર્પિત ટેકનોલોજી ઉત્સાહી છે. ટેક ઉદ્યોગમાં એક દાયકા કરતાં વધુ અનુભવ સાથે, તેમણે Microsoft Excel અને Outlook, તેમજ Google Sheets અને Docsમાં તેમની કુશળતાને સન્માનિત કરી છે. માઈકલનો બ્લોગ તેના જ્ઞાન અને કુશળતાને અન્ય લોકો સાથે શેર કરવા માટે સમર્પિત છે, ઉત્પાદકતા અને કાર્યક્ષમતામાં સુધારો કરવા માટે અનુસરવામાં સરળ ટીપ્સ અને ટ્યુટોરિયલ્સ પ્રદાન કરે છે. ભલે તમે અનુભવી વ્યાવસાયિક હોવ કે શિખાઉ માણસ, માઈકલનો બ્લોગ આ આવશ્યક સોફ્ટવેર સાધનોમાંથી સૌથી વધુ મેળવવા માટે મૂલ્યવાન આંતરદૃષ્ટિ અને વ્યવહારુ સલાહ આપે છે.