এক সময়ে 5 থেকে 10 জনকে ইমেল করা সাধারণত পরিচালনাযোগ্য। 30, 50, বা 500 জনকে সামান্য ভিন্ন নাম, তারিখ, অফার, অনুস্মারক বা ফলো-আপ নোট সহ ইমেল করা যেখানে প্রক্রিয়াটি ধীর এবং ত্রুটি-প্রবণ হয়ে ওঠে। সেখানেই এক্সেল এবং ভিবিএ একটি শক্তিশালী সমন্বয় হয়ে ওঠে। একটি ভাল-গঠিত ওয়ার্কশীট এবং VBA কোডের সাহায্যে, আপনি স্প্রেডশীট সারিগুলিকে ব্যক্তিগতকৃত আউটলুক ইমেলে পরিণত করতে পারেন, কাস্টম বিষয় লাইন, বডি টেক্সট এবং ঐচ্ছিক সংযুক্তি সহ সম্পূর্ণ৷
এই টিউটোরিয়ালে, আমরা স্প্রেডশীট সারি থেকে ব্যক্তিগতকৃত আউটলুক বার্তা তৈরি করতে VBA ব্যবহার করে কীভাবে একটি এক্সেল ইমেল জেনারেটর তৈরি করতে হয় তা দেখাব। লক্ষ্য হল প্রতিটি সারিতে সঞ্চিত ডেটার উপর ভিত্তি করে ব্যক্তিগতকৃত আউটলুক ইমেলগুলি স্বয়ংক্রিয় করা।
ধাপ 1:আপনার এক্সেল স্প্রেডশীট সেট আপ করা
আপনার ডেটা গঠন করুন যাতে VBA সহজেই এটি পড়তে পারে। আমরা নিম্নোক্ত কলামগুলির সাথে "ডেটা" নামে একটি সাধারণ ওয়ার্কশীট ধরে নেব, সারি 2 থেকে শুরু করে এবং হেডারগুলির জন্য সারি 1 ব্যবহার করে:
এইভাবে একটি ওয়ার্কশীট তৈরি করুন:

এই কলামগুলি আপনার ব্যবহারের ক্ষেত্রে সামঞ্জস্য করা যেতে পারে, তবে শিরোনামগুলি পরিষ্কার এবং সামঞ্জস্যপূর্ণ রাখুন৷
ধাপ 2:আপনার ইমেল টেমপ্লেট ডিজাইন করা
কোন VBA কোড লেখার আগে, ইমেলটি কেমন হওয়া উচিত তা নির্ধারণ করুন৷
এখানে একটি সহজ অর্ডার নিশ্চিতকরণ টেমপ্লেট রয়েছে:
বিষয় টেমপ্লেট:
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>
- বন্ধনীতে স্থানধারক হল প্রতিটি এক্সেল সারি থেকে টানা মান।
- VBA-তে, আপনি সেই স্থানধারকদের প্রকৃত সেল মান দিয়ে প্রতিস্থাপন করবেন।
আপনার টেমপ্লেট জটিল হলে, আপনি এটি একটি পৃথক ওয়ার্কশীটে সংরক্ষণ করতে পারেন বা এটি একটি ফাইল থেকে পড়তে পারেন। সরলতার জন্য, আমরা এটি একটি ঘরে সংরক্ষণ করব৷
৷

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

এই রেফারেন্সটি মেল আইটেম, সংযুক্তি এবং ফোল্ডার সহ Outlook এর সম্পূর্ণ অবজেক্ট মডেলে VBA অ্যাক্সেস দেয়। যাইহোক, এই টিউটোরিয়ালের কোড উদাহরণগুলি লেট বাইন্ডিং ব্যবহার করে CreateObject(“Outlook.Application”) এর সাথে , তাই আউটলুক রেফারেন্স সেট করা এখানে দেখানো কোডের জন্য ঐচ্ছিক।
নিরাপত্তা নোট: স্বয়ংক্রিয় ইমেলগুলি আউটলুক সুরক্ষা প্রম্পটগুলিকে ট্রিগার করতে পারে। অনেক পরিবেশে, এই আচরণ Outlook নিরাপত্তা সেটিংস এবং সাংগঠনিক নীতির উপর নির্ভর করে। প্রকৃত প্রাপকদের সাথে এটি ব্যবহার করার আগে সর্বদা নিরাপদ পরিবেশে আপনার ম্যাক্রো পরীক্ষা করুন৷
পদক্ষেপ 4:ব্যক্তিগতকৃত আউটলুক ইমেল তৈরি করতে VBA কোড লেখা
- ডেভেলপার-এ যান ট্যাব>> ভিজ্যুয়াল বেসিক নির্বাচন করুন .
- সন্নিবেশ এ যান মেনু>> মডিউল নির্বাচন করুন .
- নতুন মডিউলে আপনার VBA কোড পেস্ট করুন।
- এই স্ক্রিপ্টটি সারিগুলির মধ্যে লুপ করে এবং Outlook এর মাধ্যমে ইমেল তৈরি করে৷
VBA কোড:
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") ' Change sheet name if different
' Find last row (based on column 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
' Skip row if no valid email
If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
' Personalize subject
subject = Replace(subject, "#{OrderID}", orderID)
' Build body directly from cell values
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"
' Create & send email
Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
With OutlookMail
.To = recipient
.Subject = subject
.Body = body
.Display ' Shows the email so you can review it manually
'.Send ' Uncomment when you're ready to send automatically
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

এই VBA কোড আউটলুকের সাথে সংযোগ করে এবং ওয়ার্কশীটে ব্যবহৃত প্রতিটি সারির মাধ্যমে লুপ করে। এটি নাম, ইমেল, বিষয়, অর্ডার আইডি এবং পরিমাণের মতো মানগুলি পড়ে। তারপরে এটি সরাসরি সেই মানগুলি ব্যবহার করে একটি ব্যক্তিগতকৃত বিষয় এবং শরীর তৈরি করে। অবশেষে, এটি ইমেলটি প্রদর্শন করতে পারে, এটি একটি ছোট পরিবর্তনের সাথে একটি খসড়া হিসাবে সংরক্ষণ করতে পারে বা এটি পাঠাতে পারে। বেশিরভাগ ব্যবসায়িক কর্মপ্রবাহের জন্য, .Display দিয়ে শুরু এটি সর্বোত্তম কারণ এটি আপনাকে প্রতিটি বার্তা বের হওয়ার আগে পর্যালোচনা করতে দেয়৷
ধাপ 5:আপনার বার্তাটিকে একটি পুনঃব্যবহারযোগ্য টেমপ্লেট সিস্টেমে পরিণত করা
একটি ইমেল বডি হার্ডকোডিং কাজ করে, কিন্তু একটি আরও নমনীয় এক্সেল ইমেল জেনারেটর একটি ওয়ার্কশীটের মধ্যে টেমপ্লেট সংরক্ষণ করে। ইমেল টেমপ্লেটের জন্য একটি ঘর যোগ করুন, তারপর পাঠ্য হিসাবে সেই ঘরে বেস টেমপ্লেট পেস্ট করুন। গতিশীল প্রতিস্থাপনের জন্য কোঁকড়া ধনুর্বন্ধনীতে স্থানধারক ব্যবহার করুন:
- কোডটি অন্য মডিউলে ঢোকান .
VBA কোড:
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") ' Change sheet name if different
' Find last row (based on column A - Email)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Get template from cell F2 (adjust cell reference if you placed it elsewhere)
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)
' Skip row if no valid email
If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
' Personalize subject
subject = Replace(subject, "#{OrderID}", orderID)
' Personalize body
body = emailTemplate
body = Replace(body, "{Name}", customerName)
body = Replace(body, "{OrderID}", orderID)
body = Replace(body, "{Amount}", amount)
' Add more Replace() lines for other placeholders if needed
' Create & send email
Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
With OutlookMail
.To = recipient
.Subject = subject
.HTMLBody = body
'.CC = "[email protected]"
'.Attachments.Add "C:\Invoices\" & orderID & ".pdf" ' Optional
.Display ' Shows the email so you can review it manually
'.Send ' Uncomment when you're ready to send automatically
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
- চালান এ ক্লিক করুন টেমপ্লেট করা ইমেলগুলির পূর্বরূপ দেখতে আইকন৷ ৷

কী কোড ব্যাখ্যা:
- আউটলুক সেটআপ: CreateObject(“Outlook.Application”) লেট বাইন্ডিং ব্যবহার করে একটি আউটলুক ইনস্ট্যান্স তৈরি করে, যা অফিস সংস্করণ জুড়ে আরও নমনীয়৷
- সারির মাধ্যমে লুপিং: ম্যাক্রো শেষ সারিটি গতিশীলভাবে খুঁজে পায় এবং শিরোনামগুলি এড়িয়ে যেতে সারি 2 থেকে পুনরাবৃত্তি করে৷
- টেমপ্লেট ব্যক্তিগতকরণ: প্রতিস্থাপন করুন৷ ফাংশন স্থানধারক অদলবদল করে যেমন {Name} সারি-নির্দিষ্ট ডেটা সহ। এটি একটি VBA-চালিত টেমপ্লেট সিস্টেমের মূল। আরও প্রতিস্থাপন যোগ করুন অতিরিক্ত ক্ষেত্রের জন্য লাইন।
- ইমেল তৈরি: .HTMLBody ব্যবহার করুন বোল্ড টেক্সট এবং লিঙ্কগুলির মতো সমৃদ্ধ বিন্যাসের জন্য। যদি আপনার টেমপ্লেট প্লেইন টেক্সট হয়, তাহলে .Body ব্যবহার করুন পরিবর্তে।
- পাঠানো: ।পাঠান স্বয়ংক্রিয়ভাবে বার্তা পাঠায়, যখন .প্রদর্শন এটি পর্যালোচনার জন্য খোলে, যা পরীক্ষার সময় উপযোগী।
- ত্রুটি হ্যান্ডলিং: উদাহরণগুলির মধ্যে মৌলিক ত্রুটি হ্যান্ডলিং এবং অনুপস্থিত ইমেল ঠিকানা সহ সারিগুলি এড়িয়ে যাওয়া অন্তর্ভুক্ত। উৎপাদনে, আপনি লগিং এবং আরো বিস্তারিত বৈধতা যোগ করতে চাইতে পারেন।
ধাপ 6:ম্যাক্রো পরীক্ষা এবং চালানো
- আপনার ওয়ার্কবুক একটি .xlsm হিসাবে সংরক্ষণ করুন ফাইল।
- নমুনা ডেটা পূরণ করুন। অবাঞ্ছিত বার্তা পাঠানো এড়াতে পরীক্ষার জন্য আপনার নিজের ইমেল ঠিকানা ব্যবহার করুন৷
- একটি বোতামে ম্যাক্রো বরাদ্দ করুন বা ডেভেলপারে যান৷ ট্যাব>> ম্যাক্রো নির্বাচন করুন .
- ব্যক্তিগত ইমেল পাঠান নির্বাচন করুন অথবা PersonalizedEmails_Template পাঠান>> চালান এ ক্লিক করুন .

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

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