
৫ থেকে ১০ জনকে ইমেইল পাঠানো সাধারণত ম্যানেজযোগ্য। কিন্তু ৩০, ৫০, অথবা ৫০০ জনকে কিছুটা ভিন্ন নাম, তারিখ, অফার, রিমাইন্ডার বা ফলো-আপ নোটসহ ইমেইল পাঠালে প্রক্রিয়াটি ধীর ও ত্রুটিপূর্ণ হয়ে যায়। সেটাই হলো এক্সেল এবং ভিবিএ একটি শক্তিশালী কম্বিনেশন হয়ে ওঠে। একটি সুগঠিত ওয়ার্কশীট এবং ভিবিএ কোড দিয়ে, আপনি স্প্রেডশীট সারিগুলোকে ব্যক্তিগত আউটলুক ইমেইলে রূপান্তরিত করতে পারেন, কাস্টম সাবজেক্ট লাইন, বডি টেক্সট এবং ঐচ্ছিক অ্যাট্যাচমেন্টসহ।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে ভিবিএ ব্যবহার করে একটি এক্সেল ইমেইল জেনারেটর বিল্ড করবেন যা স্প্রেডশীট সারিগুলো থেকে ব্যক্তিগত আউটলুক মেসেজ তৈরি করে। লক্ষ্য হলো প্রতিটি সারিতে সংরক্ষিত ডেটার ওপর ভিত্তি করে ব্যক্তিগত আউটলুক ইমেইল অটোমেট করা।
ধাপ ১: আপনার এক্সেল স্প্রেডশীট সেট আপ করুন
আপনার ডেটা এমনভাবে স্ট্রাকচার করুন যাতে ভিবিএ সহজে পড়তে পারে। আমরা ধরে নিচ্ছি একটি সাধারণ ওয়ার্কশীট যার নাম “Data”, নিচের কলামগুলো আছে, সারি ২ থেকে শুরু এবং সারি ১ হেডার için:
এমন একটি ওয়ার্কশীট তৈরি করুন:

এই কলামগুলো আপনার ইউজ কেস অনুযায়ী এডজাস্ট করা যাবে, কিন্তু হেডারগুলো স্পষ্ট এবং কনসিস্টেন্ট রাখুন।
ধাপ ২: আপনার ইমেইল টেমপ্লেট ডিজাইন করুন
কোনো ভিবিএ কোড লিখার আগে, ঠিক করুন ইমেইলটি কেমন দেখাবে।
এখানে একটি সাধারণ অর্ডার কনফার্মেশন টেমপ্লেট:
সাবজেক্ট টেমপ্লেট:
Your Order Confirmation - #{OrderID} বডি টেমপ্লেট:
<p>Dear {Name},</p> <p>Thank you for your recent purchase!</p> <p>We are happy to confirm your order details:</p> <ul> <li><strong>Order ID:</strong> {OrderID}</li> <li><strong>Total Amount:</strong> {Amount}</li> </ul> <p>Your order is now being processed and should ship within 2–3 business days.</p> <p>If you have any questions, feel free to reply to this email.</p> <p>Best regards,<br> Shamima<br> Customer Support Team<br> Your Company Name<br> Phone: +880-XXX-XXXXXXX</p> - ফুলKOR বন্ধনীর ভিতরের প্লেসহোল্ডারগুলো প্রতিটি এক্সেল সারির থেকে টেনে আনানো ভ্যালু।
- ভিবিএ-তে, আপনি সেই প্লেসহোল্ডারগুলোকে একচুৎসারি সেল ভ্যালুর সাথে রিপ্লেস করবেন।
যদি আপনার টেমপ্লেট জটিল হয়, আপনি এটি আলাদা একটি ওয়ার্কশীটে সংরক্ষণ করতে পারেন বা একটি ফাইল থেকে পড়তে পারেন। সادGI জন্য, আমরা এটিকে একটি সেলে রাখব।

ধাপ ৩: আউটলুক রেফারেন্স বোঝা
কোনো কোড লিখার আগে, এক্সেল কীভাবে আউটলuks অবজেক্ট লাইব্রেরির সাথে সংযোগ করতে পারে তা বোঝা সহায়ক।
- ভিবিএ এডিটর খুলুন।
- ডেভেলপার ট্যাবে যান >> ভিজ্যুয়াল বেসিক সিলেক্ট করুন বা Alt + F11 চাপুন।
- টুলস মেনুতে যান >> রেফারেন্সেস সিলেক্ট করুন।
- নিচে স্ক্রোল করুন এবং “Microsoft Outlook XX.X Object Library” চেক করুন আপনি যদি আর্লি বাইন্ডিং এবং আউটলুক-স্পেসিফিক অবজেক্ট টাইপ ব্যবহার করতে চান।
- OK ক্লিক করুন।

এই রেফারেন্স ভিবিএকে আউটলুকের পূর্ণ অবজেক্ট মডেলে অ্যাক্সেস দেয়, যার মধ্যে রয়েছে মেইল আইটেম, অ্যাট্যাচমেন্ট এবং ফোল্ডার। য 임্পর্টেন্ট, এই টিউটোরিয়ালের কোড উদাহরণগুলোর লেট বাইন্ডিং CreateObject(“Outlook.Application”) দিয়ে ব্যবহার করে, তাই আউটলুক রেফারেন্স সেট করা এই কোডের জন্য অপশনাল।
নিরাপত্তা নোট: ইমেইল অটোমেট করলে আউটলুক সিকিউরিটি প্রম্পট দেখাতে পারে। অনেক এনভায়রনমেন্টে, এই আচরণ আউটলুক সিকিউরিটি সেটিংস এবং সংগঠনগত নীতির ওপর নির্ভর করে। রিয়েল রিসিপিয়েন্টের সাথে ব্যবহার করার আগে সবসময় আপনার ম্যাক্রো একটি সেফ এনভায়রনমেন্টে টেস্ট করুন।
ধাপ ৪: ব্যক্তিগত আউটলুক ইমেইল জেনারেট করার জন্য ভিবিএ কোড লিখুন
- ডেভেলপার ট্যাবে যান >> ভিজ্যুয়াল বেসিক সিলেক্ট করুন।
- ইনসার্ট মেনুতে যান >> মডিউল সিলেক্ট করুন।
- নতুন মডিউলে আপনার ভিবিএ কোড পেস্ট করুন।
- এই স্ক্রিপ্ট সারিগুলোর মাধ্যমে লুপ করে এবং আউটলুক মাধ্যমে ইমেইল তৈরি করে।
ভিবিএ কোড:
Sub SendPersonalizedEmails() Dim OutlookApp As Object Dim OutlookMail As Object Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim subject As String Dim body As String Dim recipient As String Dim customerName As String Dim orderID As String Dim amount As String On Error GoTo ErrorHandler Set OutlookApp = CreateObject("Outlook.Application") Set ws = ThisWorkbook.Sheets("Data") ' ভিন্ন শীট নাম হলে পরিবর্তন করুন ' লাস্ট সারি খুঁজুন (কলাম A - Email ভিত্তিক) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow recipient = Trim(ws.Cells(i, 1).Value) ' Email customerName = Trim(ws.Cells(i, 2).Value) ' Name subject = Trim(ws.Cells(i, 3).Value) ' Subject orderID = Trim(ws.Cells(i, 4).Value) ' OrderID amount = Trim(ws.Cells(i, 5).Value) ' Amount ' সারি স্কিপ করুন যদি কোনো বৈধ ইমেইল না থাকে If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow ' সাবজেক্ট পার্সোনালাইজ করুন subject = Replace(subject, "#{OrderID}", orderID) ' সেল ভ্যালু থেকে সরাসরি বডি বিল্ড করুন body = "Dear " & customerName & "," & vbCrLf & vbCrLf & _ "Thank you for your order." & vbCrLf & vbCrLf & _ "Here are your order details:" & vbCrLf & _ "Order ID: " & orderID & vbCrLf & _ "Amount: " & amount & vbCrLf & vbCrLf & _ "We appreciate your business and will contact you if any further action is needed." & vbCrLf & vbCrLf & _ "Best regards," & vbCrLf & _ "Customer Support Team" ' ইমেইল তৈরি ও পাঠান Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem With OutlookMail .To = recipient .Subject = subject .Body = body .Display ' ইমেইল দেখায় যাতে আপনি ম্যানুয়ালি রিভিউ করতে পারেন '.Send ' আনকমেন্ট করুন যখন আপনি অটোম্যাটিক্যালি পাঠাতে প্রস্তুত End With Set OutlookMail = Nothing NextRow: Next i MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation CleanUp: Set OutlookMail = Nothing Set OutlookApp = Nothing Exit Sub ErrorHandler: MsgBox "An error occurred: " & Err.Description, vbCritical Resume CleanUp End Sub 
এই ভিবিএ কোড আউটলুকের সাথে সংযোগ করে এবং ওয়ার্কশীটের প্রতিটি ইউজড সারি দিয়ে লুপ করে। এটি নাম, ইমেইল, সাবজেক্ট, অর্ডার আইডি এবং অ্যামাউন্টের মতো ভ্যালু পড়ে। তারপর সেসব ভ্যালু সরাসরি ব্যবহার করে একটি পার্সোনালাইজড সাবজেক্ট এবং বডি তৈরি করে। শেষে, এটি ইমেইল ডিসপ্লে করতে পারে, একটি ছোট মডিফিকেশন দিয়ে ড্রাফট হিসেবে সংরক্ষণ করতে পারে, বা পাঠাতে পারে। অধিকাংশ বিজনেস ওয়ার্কফ্লোর জন্য, .Display দিয়ে শুরু করা ভালো কারণ এটি প্রতিটি মেসেজ পাঠানোর আগে রিভিউ করার সুযোগ দেয়।
ধাপ ৫: আপনার মেসেজকে একটি রিযুজেবল টেমপ্লেট সিস্টেমে রূপান্তর করুন
একটি ইমেইল বডি হার্ডকোড করা কাজ করে, কিন্তু একটি আরও ফ্লেক্সিবল এক্সেল ইমেইল জেনারেটর টেমপ্লেটটি একটি ওয়ার্কশীটের ভিতরে সংরক্ষণ করে। ইমেইল টেমপ্লেটের জন্য একটি সেল যোগ করুন, তারপর বেস টেমপ্লেটটি সে সেলে টেক্সট হিসেবে পেস্ট করুন। ডাইনামিক রিপ্লেসমেন্টের জন্য ফুলKOR বন্ধনিতে প্লেসহোল্ডার ব্যবহার করুন:
- কোডটি অন্য একটি মডিউলে ইনসার্ট করুন।
ভিবিএ কোড:
Sub SendPersonalizedEmails_Template() Dim OutlookApp As Object Dim OutlookMail As Object Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim emailTemplate As String Dim subject As String Dim body As String Dim recipient As String Dim customerName As String Dim orderID As String Dim amount As String On Error GoTo ErrorHandler Set OutlookApp = CreateObject("Outlook.Application") Set ws = ThisWorkbook.Sheets("Data") ' ভিন্ন শীট নাম হলে পরিবর্তন করুন ' লাস্ট সারি খুঁজুন (কলাম A - Email ভিত্তিক) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' টেমপ্লেটটি সেল F2 থেকে নিন (আপনি যদি অন্য কোথাও রাখেন তবে সেল রেফারেন্স এডজাস্ট করুন) emailTemplate = ws.Range("F2").Value If emailTemplate = "" Then MsgBox "Email template is empty. Please add it to cell F2.", vbExclamation Exit Sub End If For i = 2 To lastRow recipient = Trim(ws.Cells(i, 1).Value) customerName = Trim(ws.Cells(i, 2).Value) subject = Trim(ws.Cells(i, 3).Value) orderID = Trim(ws.Cells(i, 4).Value) amount = Trim(ws.Cells(i, 5).Value) ' সারি স্কিপ করুন যদি কোনো বৈধ ইমেইল না থাকে If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow ' সাবজেক্ট পার্সোনালাইজ করুন subject = Replace(subject, "#{OrderID}", orderID) ' বডি পার্সোনালাইজ করুন body = emailTemplate body = Replace(body, "{Name}", customerName) body = Replace(body, "{OrderID}", orderID) body = Replace(body, "{Amount}", amount) ' অন্যান্য প্লেসহোল্ডারের জন্য আরও Replace() লাইন যোগ করুন যদি দরকার ' ইমেইল তৈরি ও পাঠান Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem With OutlookMail .To = recipient .Subject = subject .HTMLBody = body '.CC = "[email protected]" '.Attachments.Add "C:\Invoices\" & orderID & ".pdf" ' ঐচ্ছিক .Display ' ইমেইল দেখায় যাতে আপনি ম্যানুয়ালি রিভিউ করতে পারেন '.Send ' আনকমেন্ট করুন যখন আপনি অটোম্যাটিক্যালি পাঠাতে প্রস্তুত End With Set OutlookMail = Nothing NextRow: Next i MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation CleanUp: Set OutlookMail = Nothing Set OutlookApp = Nothing Exit Sub ErrorHandler: MsgBox "An error occurred: " & Err.Description, vbCritical Resume CleanUp End Sub - Run আইকনে ক্লিক করুন টেমপ্লেটেড ইমেইল প্রিভিউ করার জন্য।

কোডের মূল ব্যাখ্যা:
- আউটলুক সেটআপ: CreateObject(“Outlook.Application”) লেট বাইন্ডিং ব্যবহার করে একটি আউটলুক ইনস্ট্যান্স তৈরি করে, যা অফিস ভার্সন জুড়ে বেশি ফ্লেক্সিবল।
- সারিগুলোর মাধ্যমে লুপিং: ম্যাক্রো ডাইনামিক্যালি লাস্ট সারি খুঁজে বের করে এবং হেডার স্কিপ করে সারি ২ থেকে ইটারেট করে।
- টেমপ্লেট পার্সোনালাইজেশন: Replace ফাংশন {Name} এর মতো প্লেসহোল্ডারকে সারি-স্পেসিফিক ডেটার সাথে সোয়াপ করে। এটিই ভিবিএ-চালিত টেমপ্লেট সিস্টেমের মূল। অতিরিক্ত ফিল্ডের জন্য আরও Replace লাইন যোগ করুন।
- ইমেইল ক্রিয়েশন: রিচ ফরম্যাটিং (বোল্ড টেক্সট, লিংক ইত্যাদি) এর জন্য .HTMLBody ব্যবহার করুন। আপনার টেমপ্লেট যদি প্লেইন টেক্সট হয়, .Body ব্যবহার করুন।
- পাঠানো: .Send মেসেজটি অটোম্যাটিক্যালি পাঠায়, .Display এটি রিভিউ করার জন্য খুলে দেয়, যা টেস্টিং-এ উপকারী।
- এরর হ্যান্ডলিং: উদাহরণগুলোতে বেসিক এরর হ্যান্ডলিং এবং মিসিং ইমেইল অ্যাড্রেসওয়ালা সারি স্কিপ করা রয়েছে। প্রোডাকশনে, আপনি লগিং এবং বিস্তারিত ভ্যালিডেশন যোগ করতে চাইতে পারেন।
ধাপ ৬: ম্যাক্রো টেস্ট এবং রান করা
- আপনার ওয়ার্কবুকটি .xlsm ফাইল হিসেবে সংরক্ষণ করুন।
- স্যাম্পল ডেটা পূরণ করুন। অনিচ্ছাকৃত মেসেজ পাঠানোর বজায় আপনার নিজের ইমেইল অ্যাড্রেস টেস্টের জন্য ব্যবহার করুন।
- ম্যাক্রোকে একটি বাটনে অ্যাসাইন করুন বা ডেভেলপার ট্যাবে যান >> ম্যাক্রোস সিলেক্ট করুন।
- SendPersonalizedEmails বা SendPersonalizedEmails_Template সিলেক্ট করুন >> Run ক্লিক করুন।

- আউটলুক পারমিশনের জন্য প্রম্পট করতে পারে। যদি করে, তবে আপনার টেস্ট সেটআপ কনফার্ম করার পরেই অ্যাক্সেস দিন।
- ডিসপ্লেড মেসেজ বা আউটলুকের Sent Items ফোল্ডার চেক করুন, নির্ভর করে আপনি .Display বা .Send ব্যবহার করেছেন কিনা।

টেস্টিং টিপ: .Send এর বদলে .Display দিয়ে শুরু করুন যাতে পাঠানোর আগে ইমেইল প্রিভিউ করতে পারেন।
উন্নত টেমপ্লেট কাস্টমাইজ করা
- একাধিক প্লেসহোল্ডার: আপনার যদি আরও কলাম থাকে, যেমন ডিউ ডেট, তবে dueDate = ws.Cells(i, 6).Value এর মতো ভ্যারিয়েবল যোগ করুন এবং body = Replace(body, “{DueDate}”, dueDate) ব্যবহার করুন।
- কন্ডিশনাল কন্টেন্ট: ডাইনামিক সেকশনের জন্য If স্টেটমেন্ট ব্যবহার করুন:
If customField = "VIP" Then body = body & "<p>Exclusive offer for you!</p>" End If
- ফাইল থেকে টেমপ্লেট: টেমপ্লেট সেলে রাখার বদলে, একটি টেক্সট বা এইচটিএমএল ফাইল থেকে পড়ুন:
Dim filePath As String filePath = "C:\Template.html" Open filePath For Input As #1 emailTemplate = Input$(LOF(1), 1) Close #1
- এইচটিএমএল এনহ্যান্সমেন্ট: টেমপ্লেটে ইমেজ বা লিংক এম্বেড করতে পারেন, যেমন <img src=”https://example.com/logo.png”> বা <a href=”{Link}”>Click here</a>, এবং তারপর {Link} ডাইনামিক্যালি রিপ্লেস করুন।
সাধারণ সমস্যা সমাধান
- আউটলুক পাওয়া যায়নি: নিশ্চিত করুন আউটলুক আপনার সিস্টেমে ইনস্টল করা আছে।
- সিকিউরিটি প্রম্পট: আউটলুক প্রোগ্রাম্যাটিক অ্যাক্সেস বাধা দিতে পারে। এটি আউটলুক এবং সংগঠনগত সিকিউরিটি সেটিংস দ্বারা কন্ট্রোল হয়, শুধু এক্সেল ম্যাক্রো সেটিংস দ্বারা নয়।
- পাঠানোর সময় এরর: এরর হ্যান্ডলিং যোগ করুন যেমন:
On Error GoTo ErrorHandler ' ... code ... ErrorHandler: MsgBox "Error: " & Err.Description
- পারফরম্যান্স: বড় ইমেইল লিস্টের জন্য, মেসেজের মধ্যে ছোট একটা ডিলে যোগ করুন:
Application.Wait Now + TimeValue("00:00:01") - এইচটিএমএল রেন্ডারিং সমস্যা: টেমপ্লেট সতর্কতার সাথে টেস্ট করুন এবং নিশ্চিত করুন প্লেসহোল্ডারগুলো এইচটিএমএল স্ট্রাকচারের সাথে ইন্টারফিয়ার করছে না।
এই সেটআপ বাল্ক পার্সোনালাইজড মেসেজিং-এর জন্য ভালো স্কেল করে। আপনি এটিকে আরও এক্সটেন্ড করতে পারেন অ্যাট্যাচমেন্ট, এক্সেলে পাঠানো ইমেইল লগ করা, বা বিভিন্ন সিনেরিওর জন্য একাধিক টেমপ্লেট সংরক্ষণ করে—a সম্পূর্ণ পার্সোনালাইজড ইমেইল সিস্টেম তৈরি করতে।
উপসংহার
উপরোক্ত ধাপগুলো অনুসরণ করে, আপনি একটি এক্সেল ইমেইল জেনারেটর বিল্ড করতে পারেন যা ভিবিএ ব্যবহার করে স্প্রেডশীট সারিগুলো থেকে ব্যক্তিগত আউটলুক মেসেজ তৈরি করে। এটি একটি প্র্যাক্টিক্যাল উদাহরণ যে ভিবিএ কীভাবে একটি ওয়ার্কশীটকে একটি লাইটওয়েট ইমেইল অটোমেশন টুলে রূপান্তরিত করতে পারে। বারবার একই আউটলুক মেসেজ হাত থেকে লিখার বদলে, আপনি রিযুজেবল টেমপ্লেট তৈরি করতে পারেন এবং এক্সেলকে প্রতিটি সারিতে থেকে পার্সোনালাইজড ডিটেইল ফিল আপ করতে দিতে পারেন। এটি প্রক্রিয়াকে দ্রুত, আরও কনসিস্টেন্ট এবং স্কেল করা সহজ করে দেয়। একবার বেসিক ভার্সন বিল্ড করলে, আপনি এটি এইচটিএমএল ফরম্যাটিং, একাধিক টেমপ্লেট, কন্ডিশনাল লজিক, অ্যাট্যাচমেন্ট হ্যান্ডলিং এবং স্ট্যাটাস ট্র্যাকিং দিয়ে এক্সপ্যান্ড করতে পারেন একটি সম্পূর্ণ পার্সোনালাইজড ইমেইল সিস্টেম তৈরি করতে।
নি:শুল্ক উন্নত এক্সেল এক্সারসাইজ সমাধানসহ পান!