এক্সেল ইউডিএফ কাজ করছে না: সমস্যা এবং সমাধান

  • এই শেয়ার করুন
Michael Brown

এই নিবন্ধে, আমরা আপনার ওয়ার্কবুকগুলিতে কাস্টম ফাংশনগুলি ব্যবহার করার সময় আপনি যে সমস্যাগুলির মুখোমুখি হতে পারেন তার দিকে নজর দেব। আমি আপনাকে দেখানোর চেষ্টা করব যে সেগুলি কী ঘটছে এবং কত সহজে সেগুলি সমাধান করা যেতে পারে৷

এখানে আমরা কী নিয়ে কথা বলব:

    আগে আমরা কী সম্পর্কে কথা বলেছিলাম কাস্টম ফাংশন হল, কিভাবে এটি তৈরি এবং ব্যবহার করতে হয়। আপনি যদি মনে করেন যে আপনাকে আগে থেকে UDF-এর প্রাথমিক জ্ঞান রিফ্রেশ করতে হবে, একটু বিরতি দিন এবং আমার আগের নিবন্ধটি দেখুন।

    এক্সেল ইউডিএফ কেন পুনঃগণনা করছে না?

    যখন আপনি কোন পরিবর্তন করেন আপনার ওয়ার্কবুক, এক্সেল আপনার সেখানে থাকা প্রতিটি সূত্র পুনরায় গণনা করবে না। এটি শুধুমাত্র পরিবর্তিত কোষগুলির সাথে লিঙ্ক করা সেই সূত্রগুলির ফলাফলগুলি আপডেট করবে৷

    কিন্তু এটি স্ট্যান্ডার্ড এক্সেল ফাংশনগুলির সাথে সম্পর্কিত৷ কাস্টমগুলির জন্য, এক্সেল VBA কোডকে যাচাই করতে পারে না এবং কাস্টম ফাংশনের ফলাফলকে প্রভাবিত করতে পারে এমন অন্যান্য সেলগুলি সনাক্ত করতে পারে না। অতএব, আপনি যখন ওয়ার্কবুকে পরিবর্তন করবেন তখন আপনার কাস্টম সূত্র পরিবর্তন নাও হতে পারে৷

    সমস্যাটি সমাধান করতে, আপনাকে শুধুমাত্র Application.Volatile বিবৃতিটি ব্যবহার করতে হবে৷ এটি কীভাবে প্রয়োগ করতে হয় তার ধাপে ধাপে নির্দেশাবলী শিখতে পরবর্তী অধ্যায়টি দেখুন।

    অস্থির বনাম অ-উদ্বায়ী কাস্টম ফাংশন

    ডিফল্টরূপে, এক্সেলের কাস্টম ফাংশনগুলি উদ্বায়ী নয়। এর মানে হল যে 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 শেষ ফাংশন

    এখন আপনার UDF উদ্বায়ী, তাই ওয়ার্কশীটে কোনো সেল থাকলে এটি স্বয়ংক্রিয়ভাবে পুনঃগণনা করা হবেপুনঃগণনা করা হয়েছে বা ওয়ার্কবুকে কোনো পরিবর্তন হয়েছে। আপনি ফাইলের নাম পরিবর্তন করার সাথে সাথেই আপনি সেই আপডেটটি দেখতে পাবেন।

    দ্রষ্টব্য। অনুগ্রহ করে মনে রাখবেন যে অনেকগুলি উদ্বায়ী ফাংশন আপনার এক্সেলকে ধীর করে দিতে পারে। সর্বোপরি, অনেকগুলি কাস্টম ফাংশন রয়েছে যা জটিল গণনা সম্পাদন করে এবং ক্রমাগত বড় ডেটা রেঞ্জে কাজ করে।

    অতএব, আমি শুধুমাত্র সেখানেই অস্থিরতা ব্যবহার করার পরামর্শ দিচ্ছি যেখানে এটি সত্যিই প্রয়োজন।

    কেন কাস্টম ফাংশন উপলব্ধ নয়

    যখন আপনি একটি কাস্টম ফাংশনের নামের প্রথম অক্ষর প্রবেশ করেন, এটি প্রদর্শিত হয় ইনপুট সেলের পাশের ড্রপ-ডাউন তালিকায়, স্ট্যান্ডার্ড এক্সেল ফাংশনের মতো।

    তবে, এটি সবসময় ঘটে না। কোন ভুলের কারণে এই পরিস্থিতি হতে পারে?

    আপনার যদি এক্সেল 2003-2007 থাকে, তাহলে UDF কখনই ড্রপডাউন তালিকায় উপস্থিত হয় না। সেখানে আপনি শুধুমাত্র স্ট্যান্ডার্ড ফাংশন দেখতে পাবেন।

    কিন্তু আপনি Excel এর একটি নতুন সংস্করণ ব্যবহার করলেও, আপনি ভুলবশত আরেকটি ভুল করতে পারেন।

    আপনি দেখতে পাচ্ছেন, কাস্টম ফাংশনটি অবশ্যই থাকতে হবে। মডিউল নামক একটি আদর্শ VBA মডিউল। যখন আপনি ফাংশন কোড লেখার জন্য একটি নতুন মডিউল যোগ করেন, তখন একটি মডিউল ফোল্ডার স্বয়ংক্রিয়ভাবে তৈরি হয় যাতে সমস্ত মডিউল লেখা থাকে৷

    কিন্তু কখনও কখনও এমন হয় যে একটি নতুন মডিউল নেই৷ তৈরি হচ্ছে পরবর্তী স্ক্রিনশটে আপনি দেখতে পাবেন যে কাস্টম ফাংশন কোডটি "মাইক্রোসফ্ট এক্সেল অবজেক্টস" মডিউলে রয়েছেএই ওয়ার্কবুক৷

    বিন্দু হল যে আপনি একটি ওয়ার্কশীট বা ওয়ার্কবুকের কোড এলাকায় একটি কাস্টম ফাংশন স্থাপন করতে পারবেন না৷ এই ক্ষেত্রে, ফাংশন কাজ করবে না। তাছাড়া, এটি ফাংশনের ড্রপডাউন তালিকায় প্রদর্শিত হবে না। অতএব, কোডটি সর্বদা মডিউল ফোল্ডারে থাকা উচিত।

    এক্সেল কাস্টম ফাংশন সহায়তা পাঠ্য প্রদর্শিত হয় না

    আরেকটি সমস্যা হতে পারে আপনি যখন পেস্ট করেন তখন আপনি যে ইঙ্গিতটি দেখতে পান তা হল। একটি কাস্টম ফাংশন। আপনি যদি একটি আদর্শ ফাংশন ব্যবহার করেন, আপনি সর্বদা ফাংশন এবং এর আর্গুমেন্টের জন্য একটি টুলটিপ দেখতে পাবেন। কিন্তু UDF সম্পর্কে কি?

    যদি আপনার অনেকগুলি কাস্টম ফাংশন থাকে, তাহলে তাদের প্রত্যেকটি কী গণনা করে তা মনে রাখা আপনার পক্ষে অত্যন্ত কঠিন হবে৷ কোন আর্গুমেন্ট ব্যবহার করতে হবে তা মনে রাখা আরও কঠিন হবে। আমি মনে করি একটি অনুস্মারক হিসাবে আপনার কাস্টম ফাংশনগুলির একটি বিবরণ রাখা একটি ভাল ধারণা হবে৷

    এর জন্য, আমি Application.MacroOptions পদ্ধতি ব্যবহার করার পরামর্শ দেব৷ এটি আপনাকে ফাংশন উইজার্ড উইন্ডোতে শুধুমাত্র ফাংশন নয়, এর প্রতিটি আর্গুমেন্টের বর্ণনাও দেখাতে সাহায্য করবে। আপনি যখন ফর্মুলা বারে Fx বোতামে ক্লিক করেন তখন আপনি এই উইন্ডোটি দেখতে পান৷

    চলুন দেখি কীভাবে আপনার UDFগুলিতে এই ধরনের একটি ইঙ্গিত যুক্ত করবেন৷ আগের নিবন্ধে আমরা GetMaxBetween কাস্টম ফাংশন দেখেছি। এটি নির্দিষ্ট পরিসরে সর্বাধিক সংখ্যা খুঁজে পায় এবং তিনটি আর্গুমেন্ট নেয়: সাংখ্যিক মানের একটি পরিসর, এবং সর্বাধিক এবং সর্বনিম্ন মানঅনুসন্ধান করুন৷

    এখন আমরা এই কাস্টম ফাংশনের জন্য একটি বিবরণ যোগ করব৷ এটি করার জন্য, Application.MacroOptions কমান্ড তৈরি করুন এবং চালান। GetMaxBetween ফাংশনের জন্য, আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

    Sub RegisterUDF () Dim strFuncName As String 'ফাংশনের নাম যেটি আপনি স্ট্রিং হিসাবে Dim strDescr নিবন্ধন করতে চান' ফাংশনের বিবরণ নিজেই Dim strArgs () স্ট্রিং হিসাবে 'ফাংশন আর্গুমেন্টের বর্ণনা' রেজিস্টার করুন GetMaxBetween ফাংশন ReDim strArgs (1 থেকে 3) 'আপনার ফাংশনে আর্গুমেন্টের সংখ্যা strFuncName = "GetMaxBetween" strDescr = "নির্দিষ্ট পরিসরে সর্বাধিক সংখ্যা strArgs = (1) "সাংখ্যিক মানের পরিসীমা" strArgs (2) = "লোয়ার ইন্টারভাল বর্ডার" strArgs (3) = "উপরের ইন্টারভাল বর্ডার" অ্যাপ্লিকেশন। ম্যাক্রোঅপশন ম্যাক্রো: = strFuncName, _ বর্ণনা: = strDescr, _ ArgumentDescriptions: = strArgs, = _ Category "আমার কাস্টম ফাংশন" শেষ করুন সাব

    বা

    সাব রেজিস্টার ইউডিএফ () অ্যাপ্লিকেশন। ম্যাক্রোঅপশন ম্যাক্রো: = "গেটম্যাক্সবিটভিন" , _ বর্ণনা: = "নির্দিষ্ট পরিসরে সর্বাধিক সংখ্যা" , _ বিভাগ: = "আমার কাস্টম ফাংশন" , _ আর্গুমেন্ট বর্ণনা: = অ্যারে (_ "সাংখ্যিক মানের পরিসীমা" , _ "লোয়ার ইন্টারভাল বোর der" , _ "উচ্চ ব্যবধান বর্ডার" ) End Sub

    Variable str FuncName হল ফাংশনের নাম। strDescr - ফাংশনের বিবরণ। strArgs ভেরিয়েবলে প্রতিটি আর্গুমেন্টের জন্য ইঙ্গিত থাকে।

    আপনি ভাবতে পারেন চতুর্থ আর্গুমেন্ট কি?Application.MacroOptions. এই ঐচ্ছিক যুক্তিটির নাম দেওয়া হয়েছে বিভাগ এবং এক্সেল ফাংশনগুলির ক্লাস নির্দেশ করে যেটি আমাদের কাস্টম GetMaxBetween () ফাংশনটি স্থাপন করা হবে। আপনি এটির নাম দিতে পারেন যেকোন বিদ্যমান বিভাগগুলির পরে: Math & ; ট্রিগ, স্ট্যাটিস্টিক্যাল, লজিক্যাল ইত্যাদি। আপনি নতুন ক্যাটাগরির জন্য একটি নাম উল্লেখ করতে পারেন যেখানে আপনি আপনার তৈরি করা ফাংশনগুলি রাখবেন। আপনি যদি ক্যাটাগরি আর্গুমেন্ট ব্যবহার না করেন, তাহলে কাস্টম ফাংশনটি স্বয়ংক্রিয়ভাবে “ইউজার ডিফাইনড” ক্যাটাগরিতে স্থাপন করা হবে।

    মডিউল উইন্ডোতে ফাংশন কোড পেস্ট করুন:

    তারপর "রান" বোতামে ক্লিক করুন। কমান্ডটি আপনার GetMaxBetween() ফাংশনের সাথে Fx বোতামটি ব্যবহার করার জন্য সমস্ত সেটিংস সম্পাদন করবে।

    যদি আপনি <ব্যবহার করে একটি ঘরে একটি ফাংশন সন্নিবেশ করার চেষ্টা করেন 6>Insert Function টুল, আপনি দেখতে পাবেন যে আপনার GetMaxBetween ফাংশনটি "My Custom Functions" বিভাগে রয়েছে:

    আপনি ঘরে ফাংশনের নাম টাইপ করা শুরু করতে পারেন এবং আপনি আপনার কাস্টম ফাংশনটি ফাংশনের ড্রপডাউন তালিকা থেকে দেখতে পাবেন।

    তারপর ফাংশন উইজার্ডে কল করুন Fx বোতাম সহ

    টিপ। আপনি ফাংশন উইজার্ড খুলতে CRTL + A কী সমন্বয় ব্যবহার করতে পারেন।

    ফাংশন উইজার্ড উইন্ডোতে আপনি আপনার ফাংশনের একটি বিবরণ দেখতে পাবেন, সেইসাথে প্রথম আর্গুমেন্টের জন্য একটি ইঙ্গিতও দেখতে পাবেন। আপনি উপর আপনার কার্সার রাখুনদ্বিতীয় বা তৃতীয় আর্গুমেন্ট, আপনি তাদের জন্য ইঙ্গিতও দেখতে পাবেন।

    আপনি যদি এই ইঙ্গিতগুলির পাঠ্য পরিবর্তন করতে চান তবে strDescr এবং strArgs<এর মান পরিবর্তন করুন 7> RegisterUDF () কোডে ভেরিয়েবল। তারপর আবার RegisterUDF () কমান্ডটি চালান।

    আপনি যদি তৈরি করা সমস্ত সেটিংস পূর্বাবস্থায় ফিরিয়ে আনতে চান এবং ফাংশনের বিবরণ পরিষ্কার করতে চান তবে এই কোডটি চালান:

    সাব আনরেজিস্টার ইউডিএফ () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    যখন আপনি একটি কাস্টম ফাংশন প্রবেশ করেন তখন একটি ইঙ্গিত পাওয়ার আরও একটি উপায় রয়েছে৷ ফাংশনের নাম লিখুন এবং তারপরে Ctrl + Shift + A চাপুন :

    =GetMaxBetween( + Ctrl + Shift + A

    আপনি সমস্ত ফাংশনের আর্গুমেন্টের একটি তালিকা দেখতে পাবেন:

    দুর্ভাগ্যবশত, এখানে আপনি ফাংশন এবং এর আর্গুমেন্টের বর্ণনা দেখতে পাবেন না। কিন্তু যদি আর্গুমেন্টের নামগুলো বেশ তথ্যপূর্ণ হয়, তাহলে সেগুলোও সহায়ক হতে পারে। তবুও, এটি কিছুই না করার চেয়ে ভাল :)

    ইউডিএফগুলির জন্য বুদ্ধিমত্তা তৈরি করতে একটু বেশি কাজ লাগবে যা স্ট্যান্ডার্ড এক্সেল ফাংশনের মতো কাজ করে। দুর্ভাগ্যবশত, Microsoft কোনো বিকল্প প্রদান করে না। বর্তমানে উপলব্ধ একমাত্র সমাধান হল একটি এক্সেল-ডিএনএ ইন্টেলিসেন্স এক্সটেনশন। আপনি বিকাশকারীর ওয়েবসাইটে আরও তথ্য পেতে পারেন।

    আশা করি, আপনার কাস্টম ফাংশন কাজ না করলে বা কাজ না করলে এই নির্দেশিকাগুলি আপনাকে সমস্যার সমাধান করতে সাহায্য করবেআপনি যেমন চান কাজ করুন। তবে, আপনার UDF এখনও কাজ করতে ব্যর্থ হলে, মন্তব্য বিভাগে আপনার সমস্যাটি সঠিকভাবে বর্ণনা করুন। আমরা এটি খুঁজে বের করার এবং আপনার জন্য সমাধান খুঁজে বের করার চেষ্টা করব ;)

    মাইকেল ব্রাউন হল সফ্টওয়্যার সরঞ্জাম ব্যবহার করে জটিল প্রক্রিয়াগুলিকে সরল করার আবেগের সাথে একজন উত্সর্গীকৃত প্রযুক্তি উত্সাহী৷ প্রযুক্তি শিল্পে এক দশকেরও বেশি অভিজ্ঞতার সাথে, তিনি মাইক্রোসফ্ট এক্সেল এবং আউটলুক, সেইসাথে Google পত্রক এবং ডক্সে তার দক্ষতাকে সম্মানিত করেছেন। মাইকেলের ব্লগটি তার জ্ঞান এবং দক্ষতা অন্যদের সাথে ভাগ করে নেওয়ার জন্য নিবেদিত, উত্পাদনশীলতা এবং দক্ষতার উন্নতির জন্য সহজে অনুসরণযোগ্য টিপস এবং টিউটোরিয়াল প্রদান করে৷ আপনি একজন অভিজ্ঞ পেশাদার বা একজন শিক্ষানবিসই হোন না কেন, মাইকেলের ব্লগ এই প্রয়োজনীয় সফ্টওয়্যার সরঞ্জামগুলি থেকে সর্বাধিক পাওয়ার জন্য মূল্যবান অন্তর্দৃষ্টি এবং ব্যবহারিক পরামর্শ প্রদান করে৷