আপনার এক্সেল-টু-ওয়ার্ড মেল মার্জ প্রক্রিয়াকে স্ট্রীমলাইন করা
একাধিক শীট পরিচালনা করা এবং প্রত্যেকটি তার সংশ্লিষ্ট Word নথির সাথে নির্বিঘ্নে সংযোগ করা নিশ্চিত করা একটি স্মারক কাজের মতো অনুভব করতে পারে। কল্পনা করুন যে একটি এক্সেল ওয়ার্কবুকে 30টি শীট রয়েছে, প্রতিটি অনন্য সার্টিফিকেট ডেটা দিয়ে পূর্ণ, এবং প্রতিটি শীটের জন্য স্বয়ংক্রিয় মেল মার্জ করার জন্য একটি সমাধান প্রয়োজন৷ 😅
এই সঠিক সমস্যাটি সম্প্রতি একটি বড় ডেটাসেটের সাথে কাজ করার সময় এসেছে যেখানে প্রতিটি ওয়ার্ড ডকুমেন্টকে একটি নির্দিষ্ট শীট থেকে গতিশীলভাবে ডেটা টানতে হবে। চ্যালেঞ্জটি কেবল মেল মার্জকে স্বয়ংক্রিয় করা নয় বরং প্রক্রিয়াটিকে অভিযোজিত করা যাতে শীট ব্যবহার করা হোক না কেন এটি নির্বিঘ্নে কাজ করে। যে যেখানে VBA চকমক.
VBA ম্যাক্রো ব্যবহার করে, আপনি একটি গতিশীল এবং পুনরায় ব্যবহারযোগ্য সমাধান তৈরি করতে পারেন। মূলটি হল আপনার মেল মার্জ-এ SQL স্টেটমেন্টকে সক্রিয় শীটের নামের সাথে বেঁধে নমনীয় করা। যদিও ধারণাটি ভয়ঙ্কর শোনাতে পারে, একটি ধাপে ধাপে পদ্ধতি পুরো প্রক্রিয়াটিকে পরিচালনাযোগ্য অংশে সরল করে।
এই নির্দেশিকায়, আমরা আপনার VBA মেল মার্জ কোডে একটি পরিবর্তনশীল শীটের নাম কীভাবে ব্যবহার করতে হয় তা ভেঙে দেব। এই কৌশলটির সাহায্যে, আপনি আপনার কর্মপ্রবাহকে দক্ষতার সাথে স্বয়ংক্রিয় করতে পারেন, অগণিত ঘন্টার ম্যানুয়াল সামঞ্জস্য সংরক্ষণ করে৷ আসুন ডুব দিয়ে এই চ্যালেঞ্জটিকে একটি সুবিন্যস্ত সমাধানে রূপান্তরিত করি! 🚀
আদেশ | ব্যবহারের উদাহরণ |
---|---|
DisplayAlerts | Word VBA-তে এই কমান্ডটি সিস্টেম সতর্কতা নিষ্ক্রিয় বা পুনরুদ্ধার করে। উদাহরণস্বরূপ, wdApp.DisplayAlerts = wdAlertsNone মেল মার্জ সেটআপের সময় SQL প্রম্পটকে বাধা দেয় না। |
OpenDataSource | ওয়ার্ড ডকুমেন্টকে এক্সেল ওয়ার্কবুকের মতো এক্সটার্নাল ডাটা সোর্সের সাথে সংযোগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, .OpenDataSource Name:=strWorkbookName সক্রিয় এক্সেল ফাইলের একটি লিঙ্ক স্থাপন করে। |
SQLStatement | ডেটা উৎসের মধ্যে একটি নির্দিষ্ট টেবিল বা শীট থেকে ডেটা টানতে SQL কোয়েরি নির্দিষ্ট করে। উদাহরণস্বরূপ, SQLStatement:="SELECT * FROM [" & sheetname & "$]" সক্রিয় শীটকে গতিশীলভাবে লক্ষ্য করে। |
MainDocumentType | মেল মার্জ নথির ধরন সংজ্ঞায়িত করে। উদাহরণস্বরূপ, .MainDocumentType = wdFormLetters ফর্ম অক্ষরের জন্য নথি সেট করে। |
SuppressBlankLines | ডেটা ক্ষেত্রগুলি খালি থাকলে মার্জড নথিতে ফাঁকা লাইনগুলিকে আটকায়৷ উদাহরণস্বরূপ, .SuppressBlankLines = True ক্লিনার আউটপুট নিশ্চিত করে। |
Destination | মেল মার্জ এর আউটপুট নির্ধারণ করে। উদাহরণস্বরূপ, .Destination = wdSendToNewDocument একত্রিত ফলাফলের সাথে একটি নতুন Word নথি তৈরি করে। |
CreateObject | একটি অ্যাপ্লিকেশন অবজেক্টের একটি উদাহরণ তৈরি করে, যেমন Word। উদাহরণস্বরূপ, সেট wdApp = CreateObject("Word.Application") প্রারম্ভিক বাইন্ডিং ছাড়াই গতিশীলভাবে ওয়ার্ড শুরু করে। |
ConfirmConversions | ফাইল রূপান্তর প্রম্পট দমন করার জন্য নথি খোলার সময় ব্যবহৃত হয়। উদাহরণস্বরূপ, .Documents.Open(..., ConfirmConversions:=False) অপ্রয়োজনীয় ডায়ালগ এড়িয়ে যায়। |
SubType | মেল মার্জ ডেটা সোর্সের সাবটাইপ সংজ্ঞায়িত করে। উদাহরণস্বরূপ, সাব টাইপ:=wdMergeSubTypeAccess ব্যবহার করা হয় যখন অ্যাক্সেস-এর মতো এক্সেল ডাটাবেসের সাথে সংযোগ করা হয়। |
Visible | Word অ্যাপ্লিকেশনের দৃশ্যমানতা নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, wdApp.Visible = True নিশ্চিত করে যে কার্যকর করার সময় Word ইন্টারফেস প্রদর্শিত হবে। |
VBA-তে ডায়নামিক শীট নির্বাচনের সাথে মেল মার্জ উন্নত করা
একটি মেল মার্জ স্বয়ংক্রিয় করার সময় স্ক্রিপ্টগুলি একটি সাধারণ চ্যালেঞ্জের ঠিকানা প্রদান করে: একটি Excel ওয়ার্কবুকের একাধিক শীট থেকে ডাটাতে গতিশীলভাবে একটি Word নথি সংযুক্ত করা। প্রাথমিক লক্ষ্য হল ভিবিএ কোডে ব্যবহৃত এসকিউএল ক্যোয়ারীটিকে একটি হার্ডকোডেড শীট রেফারেন্সের পরিবর্তে সক্রিয় শীট থেকে ডেটা নির্বাচন করার জন্য তার নাম দ্বারা চিহ্নিত করা। এই নমনীয়তা বিশেষভাবে উপযোগী যখন অসংখ্য শীট সম্বলিত ওয়ার্কবুকগুলির সাথে কাজ করে, যেমন বিভিন্ন ধরণের শংসাপত্র তথ্য. এই প্রক্রিয়াটি স্বয়ংক্রিয় করার মাধ্যমে, আমরা উল্লেখযোগ্য সময় বাঁচাই এবং ম্যানুয়াল ত্রুটির ঝুঁকি হ্রাস করি। 🚀
প্রথম স্ক্রিপ্টটি সঠিক এক্সেল শীটে Word নথিকে গতিশীলভাবে লিঙ্ক করার জন্য একটি ধাপে ধাপে পদ্ধতি প্রদর্শন করে। মূল কমান্ডগুলির মধ্যে রয়েছে `OpenDataSource`, যা Word কে Excel ওয়ার্কবুকের সাথে সংযুক্ত করে এবং `SQLSstatement`, যা সক্রিয় শীটটিকে এর নাম ব্যবহার করে উৎস হিসেবে নির্দিষ্ট করে। উদাহরণস্বরূপ, `"SELECT * FROM [" & sheetname & "$]"` ব্যবহার করা নিশ্চিত করে যে ডেটা সর্বদা বর্তমান সক্রিয় শীট থেকে টানা হয়। এই পদ্ধতি ব্যবহারকারীর হস্তক্ষেপ কমিয়ে দেয় এবং বিভিন্ন পরিস্থিতিতে সহজে খাপ খাইয়ে নেয় যেখানে শীটের নাম পরিবর্তন বা ফাইলের মধ্যে পার্থক্য হতে পারে।
দ্বিতীয় স্ক্রিপ্ট দৃঢ় প্রবর্তন দ্বারা এটি নির্মাণ ত্রুটি পরিচালনা. যদিও বেস কার্যকারিতা একই থাকে, এই সংস্করণটি নিশ্চিত করে যে যদি কিছু ভুল হয়ে যায়, যেমন ফাইলের পাথটি ভুল বা সক্রিয় শীটে সমালোচনামূলক ডেটা অনুপস্থিত, ত্রুটিটি ধরা পড়ে এবং প্রোগ্রামটি ক্র্যাশ না করেই প্রদর্শিত হয়। উদাহরণ স্বরূপ, ফাইলটি অনুপস্থিত থাকার কারণে যদি `Documents.Open` কমান্ড ব্যর্থ হয়, তাহলে ত্রুটি হ্যান্ডলার প্রসেস থেকে প্রস্থান করে এবং ব্যবহারকারীকে একটি পরিষ্কার বার্তা দিয়ে জানায়। এই পদ্ধতিটি এমন পরিবেশে বিশেষভাবে সহায়ক যেখানে একাধিক ব্যবহারকারী একই ফাইলের সাথে ইন্টারঅ্যাক্ট করতে পারে, যার ফলে ত্রুটির সম্ভাবনা বেশি। 🛠️
উপরন্তু, `DisplayAlerts` এবং `SuppressBlankLines`-এর মতো কমান্ডের ব্যবহার অপ্রয়োজনীয় প্রম্পট প্রতিরোধ করে এবং পরিষ্কার, পেশাদার-সুদর্শন আউটপুট তৈরি করে ব্যবহারকারীর অভিজ্ঞতা বাড়ায়। উদাহরণস্বরূপ, ফাঁকা লাইনগুলি দমন করা নিশ্চিত করে যে এমনকি যদি এক্সেল শীটে কিছু সারি সম্পূর্ণ ডেটার অভাব থাকে, তবে ওয়ার্ড আউটপুটে কুৎসিত ফাঁক থাকবে না। একসাথে, এই স্ক্রিপ্টগুলি দক্ষতার সাথে এবং গতিশীলভাবে জটিল মেল মার্জ কাজগুলিকে স্বয়ংক্রিয় করার একটি শক্তিশালী কিন্তু সহজ উপায় প্রদর্শন করে, যারা নিয়মিত একাধিক এক্সেল শীট এবং ওয়ার্ড টেমপ্লেটের সাথে কাজ করে এমন ব্যবহারকারীদের উপকৃত করে৷
VBA ব্যবহার করে এক্সেল থেকে ওয়ার্ডে ডায়নামিক মেল মার্জ
এই পদ্ধতিটি একটি পুনঃব্যবহারযোগ্য এবং মডুলার মেল মার্জ ম্যাক্রো তৈরি করতে VBA ব্যবহার করে, গতিশীলভাবে SQL ক্যোয়ারীতে শীটের নাম প্রতিস্থাপন করে।
' Subroutine to perform mail merge dynamically based on active sheet
Sub DoMailMerge()
' Declare variables
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim strWorkbookName As String
Dim r As Range
Dim nLastRow As Long, nFirstRow As Long
Dim WFile As String, sheetname As String
' Get active workbook and sheet details
strWorkbookName = ThisWorkbook.FullName
WFile = Range("A2").Value
sheetname = ActiveSheet.Name
' Define the selected range
Set r = Selection
nLastRow = r.Rows.Count + r.Row - 2
nFirstRow = r.Row - 1
' Open Word application
With wdApp
.DisplayAlerts = wdAlertsNone
Set wdDoc = .Documents.Open("C:\Users\Todd\Desktop\" & WFile, ConfirmConversions:=False, ReadOnly:=True)
With wdDoc.MailMerge
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
' Connect to Excel data dynamically using sheetname
.OpenDataSource Name:=strWorkbookName, ReadOnly:=True, _
LinkToSource:=False, AddToRecentFiles:=False, Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
"User ID=Admin;Data Source=" & strWorkbookName & ";" & _
"Mode=Read;Extended Properties='HDR=YES;IMEX=1';", _
SQLStatement:="SELECT * FROM [" & sheetname & "$]", _
SubType:=wdMergeSubTypeAccess
With .DataSource
.FirstRecord = nFirstRow
.LastRecord = nLastRow
End With
.Execute
.MainDocumentType = wdNotAMergeDocument
End With
wdDoc.Close False
.DisplayAlerts = wdAlertsAll
.Visible = True
End With
End Sub
বিকল্প পদ্ধতি: বর্ধিত দৃঢ়তার জন্য ত্রুটি হ্যান্ডলিং ব্যবহার করা
এই বিকল্প পদ্ধতিতে ত্রুটি হ্যান্ডলিং অন্তর্ভুক্ত করা হয়েছে যাতে সুদৃশ্য সম্পাদন নিশ্চিত করা যায় এবং সমস্যা দেখা দিলে ক্র্যাশ এড়ানো।
Sub DoMailMergeWithErrorHandling()
On Error GoTo ErrorHandler
Dim wdApp As Object, wdDoc As Object
Dim strWorkbookName As String, WFile As String, sheetname As String
Dim r As Range, nLastRow As Long, nFirstRow As Long
' Get workbook and active sheet information
strWorkbookName = ThisWorkbook.FullName
WFile = Range("A2").Value
sheetname = ActiveSheet.Name
Set r = Selection
nLastRow = r.Rows.Count + r.Row - 2
nFirstRow = r.Row - 1
' Initialize Word application
Set wdApp = CreateObject("Word.Application")
wdApp.DisplayAlerts = 0
' Open Word document
Set wdDoc = wdApp.Documents.Open("C:\Users\Todd\Desktop\" & WFile, False, True)
With wdDoc.MailMerge
.MainDocumentType = 0
.Destination = 0
.SuppressBlankLines = True
' Dynamic connection
.OpenDataSource Name:=strWorkbookName, ReadOnly:=True, _
LinkToSource:=False, AddToRecentFiles:=False, Format:=0, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
"User ID=Admin;Data Source=" & strWorkbookName & ";" & _
"Mode=Read;Extended Properties='HDR=YES;IMEX=1';", _
SQLStatement:="SELECT * FROM [" & sheetname & "$]"
.Execute
End With
ErrorHandler:
If Err.Number <> 0 Then
MsgBox "Error: " & Err.Description, vbCritical
End If
On Error Resume Next
If Not wdDoc Is Nothing Then wdDoc.Close False
If Not wdApp Is Nothing Then wdApp.Quit
End Sub
VBA এর সাথে ডায়নামিক মেল মার্জকে আরও স্মার্ট করে তোলা
VBA তে একটি মেল মার্জ স্বয়ংক্রিয় করার একটি প্রায়ই উপেক্ষিত দিক হল গতিশীল ডেটা উত্সগুলির সাথে সামঞ্জস্যতা নিশ্চিত করা। এমন পরিস্থিতিতে যেখানে এক্সেল ওয়ার্কবুকগুলিতে একাধিক শীট থাকে, প্রতিটি নির্দিষ্ট ওয়ার্ড টেমপ্লেটের সাথে সম্পর্কিত, গতিশীল SQL কোয়েরিগুলি পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ। একটি পরিবর্তনশীল হিসাবে সক্রিয় শীটের নাম ব্যবহার করে, আপনি হার্ডকোডেড শীট রেফারেন্সের অনমনীয়তা এড়াতে পারেন। এটি বিশেষভাবে উপযোগী যখন আপনার ডেটা নিয়মিত পরিবর্তন হয়, যেমন মাসিক প্রতিবেদন বা শংসাপত্র তৈরি করা। এই নমনীয়তার সাথে, প্রক্রিয়াটি জটিল কর্মপ্রবাহের জন্য আরও মাপযোগ্য এবং অভিযোজনযোগ্য হয়ে ওঠে। 📈
আরেকটি গুরুত্বপূর্ণ বিবেচনা ফাইল সংগঠন। ওয়ার্ড টেমপ্লেট সংরক্ষণ করা এবং আপনার VBA স্ক্রিপ্টে সরাসরি উল্লেখ করা প্রক্রিয়াটিকে সহজ করে। টেমপ্লেট নামগুলিকে একটি মনোনীত কক্ষে (যেমন সেল A2) স্থাপন করে, আপনি কোডটি সম্পাদনা করার প্রয়োজন ছাড়াই সংশোধন এবং পরিচালনা করা সহজ করে তোলেন। বড় ডেটাসেট বা দলের সহযোগিতার সাথে কাজ করার সময় এই পদ্ধতিটি উপকারী, যেখানে একাধিক ব্যবহারকারীকে ম্যানুয়াল সমন্বয় ছাড়াই একই ম্যাক্রো চালানোর প্রয়োজন হতে পারে।
অবশেষে, অর্থপূর্ণ ত্রুটি বার্তা এবং প্রম্পটগুলির মতো ব্যবহারকারী-বান্ধব বৈশিষ্ট্যগুলি যোগ করা স্ক্রিপ্টের ব্যবহারযোগ্যতাকে ব্যাপকভাবে উন্নত করতে পারে। উদাহরণস্বরূপ, "নির্দিষ্ট ডিরেক্টরিতে ফাইল পাওয়া যায়নি" এর মতো একটি বার্তা প্রদর্শন করা সমস্যা সমাধানের সময় বাঁচাতে পারে। এই ধরনের উন্নতিগুলি VBA অটোমেশনকে বিভিন্ন প্রযুক্তিগত দক্ষতার সাথে ব্যবহারকারীদের কাছে অ্যাক্সেসযোগ্য করে তোলে। সামগ্রিকভাবে, এই সর্বোত্তম অনুশীলনগুলি গ্রহণ করা শুধুমাত্র আপনার কর্মপ্রবাহকে স্ট্রিমলাইন করে না বরং আপনার অটোমেশনকে শক্তিশালী এবং ব্যবহারকারীকেন্দ্রিক করে তোলে। 🛠️
VBA এর সাথে ডায়নামিক মেল মার্জ করার জন্য প্রয়োজনীয় প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
- উদ্দেশ্য কি SQLStatement VBA স্ক্রিপ্টে?
- দ SQLStatement কমান্ড এক্সেল শীট থেকে ডেটা আনার জন্য ব্যবহৃত ক্যোয়ারী নির্দিষ্ট করে। উদাহরণস্বরূপ, "নির্বাচন * FROM [SheetName$]" নিশ্চিত করে যে সক্রিয় শীটটি একত্রিত হওয়ার সময় গতিশীলভাবে লিঙ্ক করা হয়েছে৷
- আমি কিভাবে অনুপস্থিত Word টেমপ্লেট ফাইল পরিচালনা করব?
- ব্যবহারকারীদের অবহিত করার জন্য একটি প্রম্পট সহ ত্রুটি পরিচালনা অন্তর্ভুক্ত করুন, যেমন: On Error GoTo ErrorHandler. এটি নিশ্চিত করে যে একটি ফাইল অনুপলব্ধ হলে স্ক্রিপ্টটি ক্র্যাশ না হয়।
- এই পদ্ধতি কি লুকানো শীট পরিচালনা করতে পারে?
- হ্যাঁ, তবে নিশ্চিত করুন যে স্ক্রিপ্টটি সঠিক শীটের নাম ব্যবহার করে উল্লেখ করেছে ActiveSheet.Name দৃশ্যমান এবং লুকানো শীটগুলির সাথে অমিল এড়াতে।
- মার্জড নথিতে আমি কীভাবে ফাঁকা লাইনগুলি দমন করব?
- ব্যবহার করুন .SuppressBlankLines = True ডাটা অসম্পূর্ণ থাকলেও পরিষ্কার আউটপুট নিশ্চিত করতে মেল মার্জ বিভাগে কমান্ড দিন।
- ওয়ার্ড টেমপ্লেট সংরক্ষণের জন্য কিছু সেরা অনুশীলন কি কি?
- একটি ভাগ করা ফোল্ডারে সমস্ত টেমপ্লেট রাখুন এবং স্ক্রিপ্ট ব্যবহার করে গতিশীলভাবে তাদের উল্লেখ করুন Range("A2").Value সহজ আপডেটের জন্য।
- আমি কি অন্য ডেটাসেটের জন্য এই স্ক্রিপ্টটি পুনরায় ব্যবহার করতে পারি?
- একেবারে। শীটের নাম এবং ফাইল পাথ প্যারামিটারাইজ করে, স্ক্রিপ্ট পরিবর্তন ছাড়াই বিভিন্ন ডেটাসেটের সাথে মানিয়ে নিতে পারে।
- মার্জ করার সময় আমি কীভাবে ওয়ার্ড অ্যাপ্লিকেশনটি প্রদর্শন করব?
- সেট wdApp.Visible = True মেল মার্জ প্রক্রিয়া চলাকালীন ব্যবহারকারীর কাছে Word ইন্টারফেস দৃশ্যমান করতে।
- আমি ভুলভাবে একটি পরিসীমা নির্বাচন করলে কি হবে?
- যেমন চেক অন্তর্ভুক্ত If Selection Is Nothing Then Exit Sub এগিয়ে যাওয়ার আগে নির্বাচন যাচাই করতে।
- অ্যাক্সেস ডাটাবেসের সাথে এটিকে সংহত করা কি সম্ভব?
- হ্যাঁ, পরিবর্তন করে Connection স্ট্রিং, একই স্ক্রিপ্ট অ্যাক্সেস বা অন্যান্য ডাটাবেস থেকে ডেটা আনতে পারে।
- কিভাবে আমি কার্যকরভাবে আমার VBA কোড ডিবাগ করব?
- ব্রেকপয়েন্ট ব্যবহার করুন এবং VBA সম্পাদকে ভেরিয়েবল দেখুন কোডের মাধ্যমে ধাপে ধাপে এবং সমস্যাগুলি সনাক্ত করুন৷
অটোমেটেড ওয়ার্কফ্লো অপ্টিমাইজ করা
ডায়নামিক মেল মার্জ করার জন্য VBA আয়ত্ত করা উল্লেখযোগ্য সময় বাঁচাতে পারে এবং ক্লান্তিকর ম্যানুয়াল পদক্ষেপগুলি দূর করতে পারে। সক্রিয় শীটটিকে সঠিক ওয়ার্ড টেমপ্লেটের সাথে গতিশীলভাবে সংযুক্ত করে, আপনি দক্ষতার নতুন স্তর আনলক করেন। এই পদ্ধতিটি বড় মাপের শংসাপত্র বা প্রতিবেদন তৈরির কর্মপ্রবাহ পরিচালনার জন্য আদর্শ। 🚀
ফাইল সংগঠন, ত্রুটি পরিচালনা, এবং নমনীয় SQL প্রশ্নগুলির মতো সর্বোত্তম অনুশীলনগুলি গ্রহণ করা একটি নির্ভরযোগ্য এবং শক্তিশালী সমাধান নিশ্চিত করে। আপনি ব্যক্তিগত ব্যবহারের জন্য বা দলের সহযোগিতার জন্য স্বয়ংক্রিয় হন না কেন, এই কৌশলগুলি প্রক্রিয়াগুলিকে স্ট্রিমলাইন করে, ত্রুটিগুলি হ্রাস করে এবং উত্পাদনশীলতা বাড়ায়৷ ভিবিএ-তে একটি সাধারণ বিনিয়োগ আপনার নথি অটোমেশনকে রূপান্তরিত করতে পারে!
VBA মেল মার্জ এর জন্য উৎস এবং তথ্যসূত্র
- এই নিবন্ধের বিষয়বস্তু VBA প্রোগ্রামিং এবং সমস্যা সমাধানের কৌশলগুলির ব্যবহারিক প্রয়োগ দ্বারা অনুপ্রাণিত, যেমন সম্পদে বিস্তারিত মাইক্রোসফ্ট ওয়ার্ড ভিবিএ ডকুমেন্টেশন .
- ভিবিএ-এর মধ্যে গতিশীল ডেটা সংযোগ এবং এসকিউএল কোয়েরি বোঝার জন্য, এখানে উপলব্ধ গাইড থেকে অন্তর্দৃষ্টি নেওয়া হয়েছিল মাইক্রোসফট এক্সেল সাপোর্ট .
- এক্সেল এবং ওয়ার্ডে পুনরাবৃত্তিমূলক কাজগুলি স্বয়ংক্রিয় করার জন্য সর্বোত্তম অনুশীলনের উদাহরণগুলি থেকে উল্লেখ করা হয়েছিল এক্সটেনডঅফিস টিউটোরিয়াল .