VBA-তে, অন্য যে কোনো প্রোগ্রামিং ভাষার মতো, যে কোনো মান সংরক্ষণ করতে ভেরিয়েবল এবং ধ্রুবক ব্যবহার করা হয়। নাম থেকে বোঝা যায়, ভেরিয়েবল পরিবর্তন করতে পারে, যখন ধ্রুবক নির্দিষ্ট মান সঞ্চয় করে।
উদাহরণস্বরূপ, একটি ধ্রুবক Pi 3,14159265 মান সঞ্চয় করে... প্রোগ্রামটি কার্যকর করার সময় "Pi" সংখ্যাটি পরিবর্তন হবে না, তবে ধ্রুবক হিসাবে এই জাতীয় মান সংরক্ষণ করা আরও সুবিধাজনক।
একই সময়ে, আমরা ভেরিয়েবল ব্যবহার করতে পারি sVAT_রেট ক্রয়কৃত পণ্যের উপর ভ্যাট হার সংরক্ষণ করতে। পরিবর্তনশীল মান sVAT_রেট কেনা পণ্যের উপর নির্ভর করে পরিবর্তিত হতে পারে।
তথ্যের ধরণ
সমস্ত ভেরিয়েবল এবং ধ্রুবক একটি নির্দিষ্ট ডেটা টাইপের। নীচের সারণীটি সম্ভাব্য মানগুলির একটি বিবরণ এবং পরিসীমা সহ VBA-তে ব্যবহৃত ডেটা প্রকারগুলি তালিকাভুক্ত করে:
ডেটা টাইপ | আয়তন | বিবরণ | মানের সীমা |
---|---|---|---|
সংবাদের একক | 1 বাইট | ধনাত্মক পূর্ণসংখ্যা; প্রায়শই বাইনারি ডেটার জন্য ব্যবহৃত হয় | 0 থেকে 255 থেকে |
বুলিয়ান | 2 বাইট | সত্য বা মিথ্যা হতে পারে | সত্য অথবা মিথ্যা |
পূর্ণসংখ্যা | 2 বাইট | পূর্ণ সংখ্যা (কোন ভগ্নাংশ নেই) | -32 থেকে +768 পর্যন্ত |
দীর্ঘ | 4 বাইট | বড় পূর্ণসংখ্যা (কোন ভগ্নাংশ নেই) | от -2 147 483 648 до +2 147 483 647 |
একক | 4 বাইট | একক নির্ভুলতা ফ্লোটিং পয়েন্ট নম্বর | -3.4e38 থেকে +3.4e38 পর্যন্ত |
ডবল | 8 বাইট | দ্বিগুণ নির্ভুল ফ্লোটিং পয়েন্ট নম্বর | -1.8e308 থেকে +1.8e308 পর্যন্ত |
মুদ্রা | 8 বাইট | ফ্লোটিং পয়েন্ট সংখ্যা, নির্দিষ্ট সংখ্যক দশমিক স্থান সহ | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
তারিখ | 8 বাইট | তারিখ এবং সময় - তারিখের প্রকারের ডেটা একটি ফ্লোটিং পয়েন্ট সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়। এই সংখ্যার পূর্ণসংখ্যা অংশ তারিখ প্রকাশ করে, এবং ভগ্নাংশ অংশ সময় প্রকাশ করে। | জানুয়ারী 1, 100 থেকে 31 ডিসেম্বর, 9999 পর্যন্ত |
উদ্দেশ্য | 4 বাইট | অবজেক্ট রেফারেন্স | যেকোন অবজেক্ট রেফারেন্স |
স্ট্রিং | পরিবর্তন | অক্ষর সেট. স্ট্রিং টাইপ স্থির বা পরিবর্তনশীল দৈর্ঘ্যের হতে পারে। পরিবর্তনশীল দৈর্ঘ্যের সাথে বেশি ব্যবহৃত হয় | নির্দিষ্ট দৈর্ঘ্য - প্রায় 65 অক্ষর পর্যন্ত। পরিবর্তনশীল দৈর্ঘ্য - প্রায় 500 বিলিয়ন অক্ষর পর্যন্ত |
বৈকল্পিক | পরিবর্তন | একটি তারিখ, একটি ফ্লোট, বা একটি অক্ষর স্ট্রিং থাকতে পারে৷ এই ধরনের ক্ষেত্রে ব্যবহার করা হয় যেখানে আগে থেকে জানা যায় না কোন ধরনের ডেটা প্রবেশ করা হবে। | সংখ্যা – ডাবল, স্ট্রিং – স্ট্রিং |
স্পষ্টতই, উপরের টেবিলটি ব্যবহার করে এবং সঠিক ডেটা টাইপ নির্বাচন করে, আপনি মেমরিকে আরও অর্থনৈতিকভাবে ব্যবহার করতে পারেন (উদাহরণস্বরূপ, ডেটা টাইপ নির্বাচন করুন পূর্ণসংখ্যা পরিবর্তে দীর্ঘ or একক পরিবর্তে ডবল) যাইহোক, আরও কমপ্যাক্ট ডেটা টাইপ ব্যবহার করার সময়, আপনাকে সতর্ক থাকতে হবে যে আপনার কোডটি তাদের মধ্যে অসামঞ্জস্যপূর্ণভাবে বড় মান ফিট করার চেষ্টা না করে।
ভেরিয়েবল এবং ধ্রুবক ঘোষণা
অনুবাদকের নোট: ভিবিএ-তে ভেরিয়েবল সম্পর্কে বলতে গেলে, এটি আরও একটি গুরুত্বপূর্ণ বিষয় উল্লেখ করার মতো। যদি আমরা একটি ভেরিয়েবল ঘোষণা করি কিন্তু এটিতে কোনো মান নির্ধারণ না করি, তাহলে এটি একটি ডিফল্ট মান দিয়ে শুরু করা হয়:
• টেক্সট স্ট্রিং খালি স্ট্রিং দিয়ে আরম্ভ করা হয়;
• সংখ্যা — মান 0;
• টাইপ ভেরিয়েবল বুলিয়ান - মিথ্যা;
• তারিখ - 30 ডিসেম্বর, 1899।
একটি পরিবর্তনশীল বা ধ্রুবক ব্যবহার করার আগে, এটি ঘোষণা করা আবশ্যক। এটি করার জন্য, ম্যাক্রোতে নিম্নলিখিত সহজ লাইন কোড যোগ করুন:
Dim Имя_Переменной As Тип_Данных
কোড উপরের লাইনে পরিবর্তনশীল_নাম কোড ব্যবহার করা হবে যে ভেরিয়েবলের নাম, এবং ডেটা_টাইপ এই নিবন্ধে একটু আগে দেওয়া সারণী থেকে ডেটা টাইপগুলির মধ্যে একটি। উদাহরণ স্বরূপ:
ডিম sVAT_রেট সিঙ্গল ডিম এবং পূর্ণসংখ্যা হিসাবে
ধ্রুবক একইভাবে ঘোষণা করা হয়, কিন্তু ধ্রুবক ঘোষণা করার সময়, তাদের মান অবিলম্বে নির্দেশ করা আবশ্যক। উদাহরণস্বরূপ, এই মত:
Const iMaxCount = 5000 Const iMaxScore = 100
এক্সেলে ভেরিয়েবল ডিক্লেয়ার করার দরকার নেই। ডিফল্টরূপে, Excel-এ প্রবেশ করা কিন্তু ঘোষিত না হওয়া সমস্ত ভেরিয়েবলের টাইপ থাকবে বৈকল্পিক এবং সাংখ্যিক এবং পাঠ্য উভয় মান গ্রহণ করতে সক্ষম হবে।
সুতরাং, প্রোগ্রামার যেকোন সময় নতুন ভেরিয়েবল ব্যবহার করতে পারে (এমনকি এটি ঘোষিত না হলেও), এবং এক্সেল এটিকে টাইপের একটি পরিবর্তনশীল হিসাবে বিবেচনা করবে। বৈকল্পিক. যাইহোক, এটি করা উচিত নয় এমন কয়েকটি কারণ রয়েছে:
- মেমরি ব্যবহার এবং গণনাগত গতি। আপনি যদি ডেটা টাইপের ইঙ্গিত সহ একটি ভেরিয়েবল ঘোষণা না করেন, তবে ডিফল্টরূপে এটি টাইপে সেট করা হবে বৈকল্পিক. এই ডেটা টাইপ অন্যান্য ডেটা টাইপের তুলনায় বেশি মেমরি ব্যবহার করে। প্রতি ভেরিয়েবলের জন্য কয়েকটি অতিরিক্ত বাইট খুব বেশি শোনাতে পারে না, কিন্তু বাস্তবে, প্রোগ্রামগুলিতে হাজার হাজার ভেরিয়েবল থাকতে পারে (বিশেষত অ্যারেগুলির সাথে কাজ করার সময়)। অতএব, ভেরিয়েবল দ্বারা ব্যবহৃত অতিরিক্ত মেমরি বৈকল্পিক, প্রকারের ভেরিয়েবলের তুলনায় পূর্ণসংখ্যা or একক, একটি উল্লেখযোগ্য পরিমাণ পর্যন্ত যোগ করতে পারেন. উপরন্তু, ধরনের ভেরিয়েবল সহ অপারেশন বৈকল্পিক অন্যান্য ধরনের ভেরিয়েবলের তুলনায় অনেক বেশি ধীরে ধীরে কার্যকর করা হয়, যথাক্রমে, একটি অতিরিক্ত হাজার ভেরিয়েবল টাইপের বৈকল্পিক উল্লেখযোগ্যভাবে গণনা ধীর করতে পারে.
- পরিবর্তনশীল নামের টাইপো প্রতিরোধ। যদি সমস্ত ভেরিয়েবল ঘোষণা করা হয়, তাহলে VBA বিবৃতিটি ব্যবহার করা যেতে পারে - বিকল্প স্পষ্ট (আমরা এটি সম্পর্কে পরে কথা বলব) সমস্ত অঘোষিত ভেরিয়েবল সনাক্ত করার জন্য। এটি একটি ভুলভাবে লিখিত পরিবর্তনশীল নামের ফলে প্রোগ্রামে একটি ত্রুটির উপস্থিতি বাদ দেয়। উদাহরণস্বরূপ, নামের একটি ভেরিয়েবল ব্যবহার করে sVAT_রেট, আপনি একটি টাইপো করতে পারেন এবং এই ভেরিয়েবলের একটি মান নির্ধারণ করে লিখুন: "VATRate = 0,175"। আশা করা হচ্ছে এখন থেকে পরিবর্তনশীল sVAT_রেট মান 0,175 থাকা উচিত - কিন্তু অবশ্যই তা নয়। যদি সমস্ত ব্যবহৃত ভেরিয়েবলের বাধ্যতামূলক ঘোষণার মোড সক্ষম করা হয়, তাহলে VBA কম্পাইলার অবিলম্বে একটি ত্রুটি নির্দেশ করবে, কারণ এটি পরিবর্তনশীল খুঁজে পাবে না মূসক হার ঘোষিতদের মধ্যে।
- হাইলাইট করা মান যা একটি ভেরিয়েবলের ঘোষিত প্রকারের সাথে মেলে না। আপনি যদি একটি নির্দিষ্ট ধরণের একটি ভেরিয়েবল ঘোষণা করেন এবং এটিতে একটি ভিন্ন ধরণের ডেটা বরাদ্দ করার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন, যা যদি সংশোধন না করা হয় তবে প্রোগ্রামটি ক্র্যাশ হতে পারে। প্রথম নজরে, এটি ভেরিয়েবল ঘোষণা না করার একটি ভাল কারণ বলে মনে হতে পারে, কিন্তু বাস্তবে, এটি দেখা যাচ্ছে যে ভেরিয়েবলগুলির মধ্যে একটি ভুল ডেটা পেয়েছে যা এটি পাওয়ার কথা ছিল – ততই ভাল! অন্যথায়, যদি প্রোগ্রামটি চলতে থাকে, ফলাফলগুলি ভুল এবং অপ্রত্যাশিত হতে পারে এবং ত্রুটিগুলির কারণ খুঁজে বের করা আরও কঠিন হবে। এটাও সম্ভব যে ম্যাক্রো "সফলভাবে" কার্যকর করা হবে। ফলস্বরূপ, ত্রুটিটি অলক্ষিত হবে এবং ভুল ডেটা দিয়ে কাজ চলতে থাকবে!
এই বিষয়ে, একটি ভুল ডেটা টাইপ সনাক্ত করা এবং যত তাড়াতাড়ি সম্ভব কোডে এই জাতীয় ত্রুটিগুলি সংশোধন করা বাঞ্ছনীয়। এই কারণে, এটি সুপারিশ করা হয় যে আপনি একটি VBA ম্যাক্রো লেখার সময় সমস্ত ভেরিয়েবল ঘোষণা করুন৷
বিকল্প স্পষ্ট
অপারেটর বিকল্প স্পষ্ট VBA কোডে ব্যবহার করা সমস্ত ভেরিয়েবলকে ঘোষণা করার জন্য ঘটায় এবং সংকলনের সময় ত্রুটি হিসাবে সমস্ত অঘোষিত ভেরিয়েবলকে ফ্ল্যাগ করে (কোড এক্সিকিউশন শুরু হওয়ার আগে)। এই অপারেটরটি প্রয়োগ করা কঠিন নয় - VBA ফাইলের একেবারে শীর্ষে এই লাইনটি লিখুন:
Option Explicit
আপনি সবসময় ঢোকাতে চান বিকল্প স্পষ্ট তৈরি করা প্রতিটি নতুন VBA মডিউলের শীর্ষে, এটি স্বয়ংক্রিয়ভাবে করা যেতে পারে। এটি করার জন্য, আপনাকে বিকল্পটি সক্ষম করতে হবে পরিবর্তনশীল ঘোষণা প্রয়োজন VBA সম্পাদক সেটিংসে।
এটি এইভাবে করা হয়:
- ভিজ্যুয়াল বেসিক এডিটর মেনু থেকে, ক্লিক করুন সরঞ্জাম > অপশন সমূহ
- প্রদর্শিত ডায়ালগে, ট্যাবটি খুলুন সম্পাদক
- বাক্সটি যাচাই কর পরিবর্তনশীল ঘোষণা প্রয়োজন এবং টিপুন OK
সক্রিয় করা হলে, স্ট্রিং বিকল্প স্পষ্ট তৈরি করা প্রতিটি নতুন মডিউলের শুরুতে স্বয়ংক্রিয়ভাবে ঢোকানো হবে।
চলক এবং ধ্রুবকগুলির সুযোগ
প্রতিটি ঘোষিত চলক বা ধ্রুবকের নিজস্ব সীমিত সুযোগ রয়েছে, অর্থাৎ, প্রোগ্রামটির একটি সীমিত অংশ যেখানে এই ভেরিয়েবলটি বিদ্যমান। ভেরিয়েবল বা ধ্রুবকের ঘোষণা কোথায় করা হয়েছিল তার উপর ব্যাপ্তি নির্ভর করে। উদাহরণস্বরূপ, পরিবর্তনশীল নিন sVAT_রেট, যা ফাংশনে ব্যবহৃত হয় মোট খরচ. নিম্নলিখিত টেবিলে পরিবর্তনশীল স্কোপিংয়ের জন্য দুটি বিকল্প আলোচনা করা হয়েছে sVAT_রেটমডিউলে দুটি ভিন্ন অবস্থানে ঘোষণা করা হয়েছে:
অপশন এক্সপ্লিসিট ডিম sVAT_রেট একক ফাংশন হিসাবে Total_Cost() ডাবল হিসাবে... ফাংশন শেষ করুন | পরিবর্তনশীল হলে sVAT_রেট মডিউলের একেবারে শুরুতে ঘোষণা করা হয়, তাহলে এই ভেরিয়েবলের সুযোগ হবে পুরো মডিউল (অর্থাৎ পরিবর্তনশীল sVAT_রেট এই মডিউলের সমস্ত পদ্ধতি দ্বারা স্বীকৃত হবে)। অতএব, যদি ফাংশন মোট খরচ পরিবর্তনশীল sVAT_রেট কিছু মান বরাদ্দ করা হবে, তারপর একই মডিউলের মধ্যে সম্পাদিত পরবর্তী ফাংশনটি ভেরিয়েবল ব্যবহার করবে sVAT_রেট একই অর্থ সহ। যাইহোক, যদি অন্য মডিউলে অবস্থিত কিছু ফাংশন কল করা হয়, তাহলে তার জন্য ভেরিয়েবল sVAT_রেট জানা যাবে না। |
বিকল্প স্পষ্ট ফাংশন Total_Cost() ডাবল ডিম হিসাবে sVAT_Rate একক হিসাবে... ফাংশন শেষ করুন | পরিবর্তনশীল হলে sVAT_রেট অনুষ্ঠানের শুরুতে ঘোষণা করা হয় মোট খরচ, তাহলে এর সুযোগ শুধুমাত্র এই ফাংশনের মধ্যেই সীমাবদ্ধ থাকবে (যেমন ফাংশনের মধ্যে মোট খরচ, আপনি ভেরিয়েবল ব্যবহার করতে পারেন sVAT_রেট, কিন্তু বাইরে নয়)। ব্যবহার করার চেষ্টা করার সময় sVAT_রেট অন্য পদ্ধতিতে, VBA কম্পাইলার একটি ত্রুটি রিপোর্ট করবে কারণ এই ভেরিয়েবলটি ফাংশনের বাইরে ঘোষণা করা হয়নি মোট খরচ (প্রদত্ত যে অপারেটর ব্যবহার করা হয় বিকল্প স্পষ্ট). |
উপরে দেখানো উদাহরণে, ভেরিয়েবলটি কীওয়ার্ড দিয়ে মডিউল স্তরে ঘোষণা করা হয়েছে অস্পষ্ট. যাইহোক, এটি প্রয়োজনীয় হতে পারে যে ঘোষিত ভেরিয়েবলগুলি অন্যান্য মডিউলগুলিতে ব্যবহার করা যেতে পারে। এই ধরনের ক্ষেত্রে, একটি কীওয়ার্ডের পরিবর্তে একটি পরিবর্তনশীল ঘোষণা করা অস্পষ্ট কীওয়ার্ড ব্যবহার করতে হবে প্রকাশ্য.
যাইহোক, মডিউল স্তরে একটি পরিবর্তনশীল ঘোষণা করার জন্য, কীওয়ার্ডের পরিবর্তে অস্পষ্ট কীওয়ার্ড ব্যবহার করা যেতে পারে বেসরকারী, যা নির্দেশ করে যে এই ভেরিয়েবলটি শুধুমাত্র বর্তমান মডিউলে ব্যবহারের জন্য।
আপনি ধ্রুবক ঘোষণা করতে কীওয়ার্ড ব্যবহার করতে পারেন। প্রকাশ্য и বেসরকারী, কিন্তু কীওয়ার্ডের পরিবর্তে নয় const, এটা বরাবর.
নিম্নলিখিত উদাহরণগুলি কীওয়ার্ডের ব্যবহার দেখায় প্রকাশ্য и বেসরকারী ভেরিয়েবল এবং ধ্রুবকগুলিতে প্রয়োগ করা হয়।
বিকল্প সুস্পষ্ট পাবলিক sVAT_Rate as Single Public Const iMax_Count = 5000 ... | এই উদাহরণে, কীওয়ার্ড প্রকাশ্য একটি পরিবর্তনশীল ঘোষণা করতে ব্যবহৃত হয় sVAT_রেট এবং ধ্রুবক iMax_Count. এইভাবে ঘোষিত উপাদানগুলির সুযোগ সমগ্র বর্তমান প্রকল্প হবে। এই যে মানে sVAT_রেট и iMax_Count যেকোন প্রজেক্ট মডিউলে পাওয়া যাবে। |
বিকল্প সুস্পষ্ট ব্যক্তিগত sVAT_Rate হিসাবে একক ব্যক্তিগত কনস্ট iMax_Count = 5000 ... | এই উদাহরণে, একটি পরিবর্তনশীল ঘোষণা করা sVAT_রেট এবং ধ্রুবক iMax_Count কীওয়ার্ড ব্যবহার করা হয়েছে বেসরকারী. এই উপাদানগুলির সুযোগ হল বর্তমান মডিউল। এই যে মানে sVAT_রেট и iMax_Count বর্তমান মডিউলের সমস্ত পদ্ধতিতে উপলব্ধ হবে, কিন্তু অন্যান্য মডিউলের পদ্ধতিতে উপলব্ধ হবে না। |