কম্পিউটার টিউটোরিয়াল

VBA রান হওয়ার সময় এক্সেল রেসপন্সিভ রাখুন: লাইভ প্রগ্রেস মেসেজ দেখান

যখন কোডটি দীর্ঘ হয় এবং VBA ম্যাক্রো বেশ কিছু সেকেন্ড ধরে চলে, এক্সেল ফ্রোজেন বা অНРেসপন্সিভ মনে হতে পারে। এমনকি কোডটি সঠিকভাবে কাজ করলেও, ব্যবহারকারীরা মনে করতে পারে ওয়ার্কবুকটি ফ্রোজ করছে কারণ স্ক্রিনে কিছু হচ্ছে না বলে। এই সমস্যা এড়ানোর একটি সহজ উপায় হলো ম্যাক্রো চলাকালীন এক্সেলের স্ট্যাটাস বারে লাইভ মেসেজ দেখানো।

এই টিউটোরিয়ালে, আমরা দেখাব কিভাবে VBA চলাকালীন প্রগ্রেস মেসেজ দেখাতে হয়। আপনার UserForm বা গ্রাফিক্যাল প্রগ্রেস বার লাগবে না। অনেক ক্ষেত্রে, Application.StatusBarই যথেষ্ট।

Application.StatusBar কেন ব্যবহার করবেন?

এক্সেলের অ্যাপ্লিকেশন উইন্ডোর নিচে একটি বিল্ট-ইন স্ট্যাটাস বার থাকে। VBA সেটি আপনাক بلغتে সেই এলাকায় কাস্টম মেসেজ দেখাতে পারে।

এই মানে আপনার ম্যাক্রো এমন আপডেট দেখাতে পারে:

  • প্রক্রিয়া করছে সারি ১০ এর ১০০
  • ডেটা ইম্পোর্ট করছে…
  • ফর্মুলা লিখছে…
  • ৬৫% সম্পন্ন

এটি তখন উপকারী যখন আপনি ব্যবহারকারীকে জানাতে চান ম্যাক্রোটি এখনো চলছে কিন্তু ফুল ভিজ্যুয়াল প্রগ্রেস বার বানানোর ঝামেলা চান না। আপনি সারি গণনা বা পারসেন্টেজ দেখিয়ে মেসেজকে আরও ইনফরমেটিভ করতে পারেন, কিন্তু এটা টেক্সট-ভিত্তিক সমাধান।

বেসিক সিনট্যাক্স:

এক্সেল স্ট্যাটাস বারে মেসেজ দেখানোর জন্য ব্যবহার করুন:

Application.StatusBar = "Processing..." 

যখন আপনার ম্যাক্রো শেষ হয়, স্ট্যাটাস বার রিসেট করুন:

Application.StatusBar = False 

Application.StatusBar = False সেট করলে স্ট্যাটাস বারের কন্ট্রোল এক্সেলের কাছে ফিরে যায়, যা ডিফল্ট মেসেজ দেখাতে সক্ষম করে। এই ধাপ কখনো বাদ দিবেন না।

বেসিক উদাহরণ: সিম্পল প্রগ্রেস মেসেজ

এটি সবচেয়ে বেসিক ভার্সন একটি সিম্পল প্রগ্রেস মেসেজের সাথে। স্ট্যাটাস বারে এটা "Running report… please wait" দেখাবে।

Sub SimpleStatusBar() Application.StatusBar = "Running report... please wait" ' Simulate work Dim i As Long For i = 1 To 50000 ' Your processing here Next i Application.StatusBar = False ' Restore the status bar MsgBox "Done!" End Sub 

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

লুপ চলাকালীন লাইভ প্রগ্রেস দেখান

বেশিরভাগ রিয়েল ম্যাক্রোতে, আপনি সারি, সেল, ফাইল, বা রেকর্ড একে একে প্রসেস করেন। এতে লুপে প্রগ্রেস apartament স্ট্যাটাস বার আপডেট করা সহজ হয়।

Sub ShowLoopProgress() Dim i As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message Application.StatusBar = "Processing row " & (i - 1) & " of " & lastRow DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub
  • DoEvents এক্সেলকে স্ক্রিন রিফ্রেশ করতে এবং ম্যাক্রো চলাকালীন রেসপন্ড করতে দেয়
  • এটি ছাড়া, স্ট্যাটাস বার দীর্ঘ লুপে ম্যাক্রো শেষ হওয়া পর্যন্ত দৃশ্যমান আপডেট হতে পারে না
  • অতিরিক্ত বড় লুপে এটি অতিরিক্ত ব্যবহার করবেন না যদি না খুব প্রয়োজন হয়, কারণ এটি এক্সিকিউশন কিছুটা ধীর করতে পারে

নিচে স্ট্যাটাস বারে “Processing row 90 of 101” দেখাবে।

VBA রান হওয়ার সময় এক্সেল রেসপন্সিভ রাখুন: লাইভ প্রগ্রেস মেসেজ দেখান

পারসেন্টেজ মেসেজ যোগ করুন

আপনি প্রগ্রেস মেসেজ কাস্টমাইজ করতে পারেন পারসেন্টেজ যোগ করে। আপনাকে শুধু পারসেন্টেজ ক্যালকুলেট করে স্ট্যাটাস বার টেক্সটে যোগ করতে হবে।

Sub ShowPercentageProgress() Dim i As Long Dim lastRow As Long Dim percentDone As Double lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub 

এই কোড ব্যবহারকারীর জন্য একটি স্পষ্ট স্ট্যাটাস আপডেট তৈরি করে, যা “Processing row 14 of 100 (14%)” দেখায়।

VBA রান হওয়ার সময় এক্সেল রেসপন্সিভ রাখুন: লাইভ প্রগ্রেস মেসেজ দেখান

সিম্পল ফর্মুলা টাস্কের সাথে উদাহরণ

একটি প্র্যাক্টিক্যাল উদাহরণ দেখি যা ওয়ার্কশিট অ্যাকশন করে। এই ভার্সন একটি সিম্পল সেলস অ্যামাউন্ট ফর্মুলা একটি কলামে লিখে।

Sub ShowProgressWithFormula() Dim i As Long Dim lastRow As Long Dim percentDone As Double lastRow = Cells(Rows.Count, "H").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Formula = "=H" & i & "*I" & i ' Update progress message percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Writing formulas... " & _ "Row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i Application.StatusBar = False MsgBox "Formulas added in column K!" End Sub 

এটি একটি সিম্পল উদাহরণ, কিন্তু এটি অনেক ইউজার যেসব ওয়ার্কশিট টাস্ক করে তার काफी নিকটবর্তী।

একটি টেক্সট-ভিত্তিক "নকল প্রগ্রেস বার"

Application.StatusBar কোনো রিয়েল গ্রাফিক্যাল প্রগ্রেস বার তৈরি করতে পারে না। তবে, আপনি ক্যারেক্টার দিয়ে একটি বার বানিয়ে সিমুলেট করতে পারেন।

Sub StatusBarWithTextProgressBar() Dim i As Long Dim lastRow As Long Dim percentDone As Double Dim barLength As Integer Dim filledBars As Integer Dim progressBar As String lastRow = Cells(Rows.Count, "A").End(xlUp).Row barLength = 20 For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) filledBars = Int(percentDone * barLength) progressBar = String(filledBars, "|") & String(barLength - filledBars, ".") Application.StatusBar = "Progress: [" & progressBar & "] " & _ Format(percentDone, "0%") DoEvents Next i Application.StatusBar = False MsgBox "Completed!" End Sub 

যখনই আপনি VBA রান করবেন, স্ট্যাটাস বার কিছু এইরকম দেখাবে:

Progress: [||||||||||……….] 67%

এটি এখনো শুধু টেক্সট, কিন্তু এটি প্রগ্রেসের আরও বলवान ভিজ্যুয়াল অনুভূতি দেয়।

VBA রান হওয়ার সময় এক্সেল রেসপন্সিভ রাখুন: লাইভ প্রগ্রেস মেসেজ দেখান

সেরা অভ্যাস: সবসময় স্ট্যাটাস বার রিসেট করুন

সর্বाधিক সাধারণ ভুল হচ্ছে ম্যাক্রোর শেষে স্ট্যাটাস বার রিস্টোর করা ভুলে যাওয়া। আপনি যদি Application.StatusBar = False ব্যবহার না করেন, এক্সেল আপনার কাস্টম টেক্সট ম্যাক্রো শেষ হওয়ার পরেও দেখাতে থাকতে পারে। একটি নিরাপদ ভার্সন সিম্পল এরর হ্যান্ডলিং ব্যবহার করে যাতে কিছুই ভুল হলে স্ট্যাটাস বার রিসেট হয়।

Sub SafeStatusMessage() Dim i As Long Dim lastRow As Long Dim percentDone As Double On Error GoTo CleanUp lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i MsgBox "Task completed!" CleanUp: Application.StatusBar = False If Err.Number <> 0 Then MsgBox "Error: " & Err.Description End If End Sub 

এই প্যাটার্ন রিয়েল-ওয়ার্ল্ড ব্যবহারের জন্য আরও উপযোগী।

বेहतर স্ট্যাটাস মেসেজের টিপস

একটি ভালো স্ট্যাটাস বার মেসেজ ছোট এবং স্পষ্ট হওয়া উচিত। আপনার মেসেজ সংক্ষিপ্ত এবং উপকারী রাখুন। ভালো উদাহরণ:

  • সেলস ডেটা ইম্পোর্ট করছে…
  • ডুপ্লিকেট চেক করছে…
  • ওয়ার্কশিট ফরম্যাট করছে…
  • রেকর্ড ৪৫ অফ ২০০ প্রসেস করছে…
  • রিপোর্ট ফাইনালাইজ করছে…

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

রেডি-টু-ইউজ রিযুজেবল প্যাটার্ন

আপনি প্রায় সব ম্যাক্রোতে এই প্যাটার্ন রিযুজ করতে পারেন। শুধু এই কোড কপি করুন এবং আপনার লজিক там डालুন যেখানে দরকার।

Sub MyMacro() On Error GoTo CleanUp Dim i As Long Dim total As Long total = 100 For i = 1 To total Application.StatusBar = "Processing item " & i & " of " & total DoEvents ' Your code here Next i CleanUp: Application.StatusBar = False End Sub 

উপসংহার

এই টিউটোরিয়াল অনুসরণ করে, আপনি সহজেই VBA চলাকালীন প্রগ্রেস মেসেজ দেখাতে পারেন। আপনি যদি ব্যবহারকারীদের জানাতে চান যে একটি VBA ম্যাক্রো এখনো কাজ করছে, Application.StatusBar উপলব্ধ সবচেয়ে সহজ টুলের একটা। এটি ফুল প্রগ্রেস বার নয়, কিন্তু অনেক সময় এটি যথেষ্ট। এই পদ্ধতি ইমপ্লিমেন্ট করা সহজ, নির্ভরযোগ্য, ন্যূনতম কোড লাগে, এবং দীর্ঘ-চলমান VBA প্রসিডিউর চলাকালীন ইউজার এক্সপেরিয়েন্স উল্লেখযোগ্যভাবে উন্নত করে। আপনার নিজের ম্যাক্রোতে মেইন লুপের ভিতরে স্ট্যাটাস আপডেট রাখে টেস্ট করুন—এতে শুধু چند লাইন কোড লাগে।

  1. জিমেইলের জন্য ১১টি সেরা ফায়ারফক্স এক্সটেনশন

  2. শেয়ার্ড ইউনিভার্স উন্মোচন: ক্রসওভার করা ভিডিও গেম ফ্র্যাঞ্চাইজ

  3. গেমার ও ক্রিপ্টো মাইনারের জন্য সেরা ৫ হাই-পারফরম্যান্স জিপিইউ: সম্পূর্ণ গাইড

  4. ভিডিও কনফারেন্সিং-এ প্রেজেন্টার রোল পাস করার পদ্ধতি