در اینجا قصد دارم که کدهای لازم در اکسل -به زبان VBA- را برای شما قرار دهم تا بتوانید با استفاده از این کدها (که در فایل اکسل پیوست همین صفحه میتوانید دانلودش کنید) در اکسل، ایمیلهای متعددی را توسط برنامه outlook ارسال کنید.
چرا باید از اکسل ایمیل ارسال کنم؟
هنگامی که قرار است تعداد محدودی ایمیل ارسال کنید، هیچ نیازی به برنامه نویسی نیست. اما در ۲ حالت میخواهید که ارسال ایمیل از اکسل توسط آتلوک را اتوماتیک کنید:
۱) به هر کسی باید ایمیل متفاوتی بزنید و حجم این ایمیلها زیاد است. به عنوان مثال برای هر کسی به نام خودش یک دعوتنامه ارسال کنید.
۲) به صورت دورهای به صورت اتوماتیک ایمیلهایی ارسال شوند که حاوی یک فایل پیوست (attachment) هستند. به عنوان مثال قرار است که به مدیر هر واحد در سازمانتان، یک ایمیل هفتگی ارسال شود و گزارش خرابی دستگاههایی آن واحد را گزارش کنید.
در حالت ۱، به سادگی میتوانیم از ابزار «Mail Merge در Word» استفاده کنیم زیرا هیچ فایل پیوستی وجود ندارد. برای آموزش کامل این ابزار مقاله «ویدئوی آموزش ادغام پستی در ورد با نکات تکمیلی» را مطالعه کنید.
اما در حالت ۲ که قرار است یک فایل اکسل یا pdf هم به ایمیل شما پیوست شود، فقط باید برنامه نویسی انجام شود. از آنجایی که دادههای ما یعنی لیست دریافت کنندگان ایمیل و سایر دادههایی که گیرندگان ایمیل باید دریافت کنند، در اکسل است، این کد نویسی در اکسل انجام میشود.
تذکر) با mail merge نمیتوانیم هیچ فایلی را در ارسال ایمیلهای متعدد پیوست کرد.
اجازه دهید به صورت قدم به قدم چند سناریو ساده را برای آشنایی شما با این کار مطرح کنم. بدیهی است که سناریوهای متعددی ممکن است مورد نیاز شما باشد که ذکر همه آنها در این مقاله میسر نیست.
💡 پیش نیاز مهم:
برای اجرای این کدها باید توجه داشته باشید که آتلوک بر روی دستگاه شما باید نصب باشد و همچنین باید یک اکانت ایمیل (سازمانی و یا رایگان مانند جیمیل) به آن اضافه شده باشد.
سناریو ۱) در اکسل برنامهای به زبان VBA بنویسید که صفحه یک ایمیل جدید را باز کند؟
کد زیر این کار را انجام میدهد. برای راحتی فهم شما برای هر خط کد یک شماره گذاشته شده است که بتوانم آن را توضیح بدهم. (گذاشتن شماره خط در برنامه نویسی vba اجباری نیست)
Sub Scenario_1_new_email()
1: Dim OutApp As Object
2: Dim OutMail As Object
3: Set OutApp = CreateObject("Outlook.Application")
4: Set OutMail = OutApp.CreateItem(0)
5: OutMail.Display
End Sub
ما در این برنامه از روش LateBinding استفاده کردهایم و لازم نیست که شما هیچ Referenceی را در vba تیک بزنید و اضافه کنید.
سطر شماره ۱ و ۲ : تعریف متغیرها است.
سطر شماره ۳: ساختن آبجکت آتلوک است. یعنی در RAM دستگاه ما واقعا آتلوک را اجرا میکنیم.
سطر شماره ۴: یک آبجکت ایمیل میسازیم. یعنی در RAM دستگاه یک ایمیل جدید را میسازیم.
سطر شماره ۵: صفحه ایمیل جدید را برای شما واقعا نمایش میدهیم تا باور کنید که همه چیز واقعی است. در هنگام ارسال ایمیلها نیازی نیست که صفحه ایمیل نمایش داده شود و همه کارهای در RAM کامپیوتر رخ میدهد.
سناریو ۲) در اکسل برنامهای به زبان VBA بنویسید یک ایمیل برای من ارسال کند؟
آدرس ایمیل من f.meidani است در دامنه farsaran.com و اگر بخواهید که به من ایمیل بزنید، باید همان کدهای بالا را استفاده کنید و فقط چند متد ساده باید به آن اضافه شود:
Sub Scenario_2_send_email_to_farshid()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
OutMail.To = "f.meidani" & "@" & "farsaran." & "com"
OutMail.Subject = "First email by me!"
OutMail.Body = " Salam Farshid :) "
OutMail.Send
End Sub
سطر ۵: برای مشخص کردن دریافت کننده ایمیل بایدTo را مقدار دهی کنیم که من ایمیل خودم را نوشتم و به خاطر اینکه اسمپرها نتوانند ایمیل من را از روی این صفحه بیابند، آن را تکه به تکه به هم چسباندم.
سطر ۶: برای مشخص کردن موضوع ایمیل، Subject را مقدار دهی میکنیم.
سطر ۷: برای مشخص کردن متن ایمیل مقدار Body را مقدار دهی میکنیم. این یک متن کاملا ساده است.
سطر ۸: برای ارسال واقعی ایمیل، از متد Send استفاده کردیم.
لازم نیست که آتلوک را شما اجرا کنید تا آن را ببینید، بلکه همه این اتفاقات در RAM کامیپوتر شما رخ میدهد و واقعا ایمیل ارسال میشود و من ایمیل شما اینگونه دریافت خواهم کرد:
سناریو ۳) در اکسل برنامهای به زبان VBA بنویسید یک ایمیل را آماده ارسال کند و اطلاعات آن را از اکسل بخواند:
الف) در سلول A1 شیت Data : نام گیرنده ایمیل
ب) در سلول A2 شیت Data : متن html ایمیل
ج) در سلول A3 شیت Data : مسیر و نام کامل فایل که باید پیوست شود
Sub Scenario_3_htlm_email_with_attachment()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
5: OutMail.To = Sheets("Data").Range("A1").Value
6: OutMail.Subject = "email & attachment"
7: OutMail.HTMLBody = Sheets("Data").Range("A2").Value
8: OutMail.Attachments.Add Sheets("Data").Range("A3").Value
9: OutMail.Display
End Sub
سطر ۵: نام گیرنده ایمیل از سلول A1 شیت Data خوانده میشود.
سطر ۶: Subject ایمیل است.
سطر ۷: اگر بخواهیم که متن ایمیل ساده نباشد و بتوانیم آن را کمی فرمت دهی کنیم، باید به جای Body از HTMLBody استفاده کنیم و متن را با کدهای html کمی فرمت بندی کنیم.
سطر ۸: با Attachments.Add میتوانیم یک فایل را پیوست کنیم.
سطر ۹: با متد Display ایمیل را میتوانیم مشاهده کنیم و پس از آزمایش و صحت عملکرد کد، برای ارسال واقعی ایمیل از متد Send مانند ۲ سناریو قبلی استفاده خواهیم کرد.
به تصویر شیت Data در اکسل دقت کنید:
نام گیرندگان: میتواند چندین نفر باشد که با علامت , از هم جدا شدهاند.
متن html ایمیل: تگ <br>
در زبان html همان Enter است و یک سطر جدید ایجاد میکند و تگ <b>
هم برای Bold کردن بکار میرود. (برای یادگیری اصول اولیه زبان html حدود ۱ ساعت وقت کافی است و از آدرس w3schools.com آن را مطالعه کنید).
نتیجه اجرای این کد تصویر زیر خواهد شد:
سناریو ۴) فایل فیش حقوق هر یک از کارشناسان را برای او به پیوست یک ایمیل، ارسال کنید.
همانطور که در ابتدای این مقاله گفته شد، با mail merge در word نمیتوانیم فایلهایی را پیوست کنیم و این کار فقط با کد نویسی امکان پذیر است. فرض کنید که یک جدول دارید که ایمیل، مبلغ حقوق و آدرس فایل pdf فیش حقوقی هر یک از کارشناسان سازمان شما در آن است و میخواهیم که آن فیش را برای او در یک پیوست ایمیل با آتلوک ارسال کنیم.
در فایل پیوست همین صفحه کدهای vba لازم برای اینکار قرار داده شده است که میتوانید آن را دانلود کنید.
شما هم تجربه یا دیدگاه خود را بنویسید:
با سلام و عرض ادب
خیلی خوب بود
سلام فرشید جان
ممنون مقاله فوق العاده کاربردی بود
اگر بخواهیم از طریق میلینگ ورد به صورت گروهی فیش حقوقی ارسال کنیم بهترین راه این هست که داخل خود WORD فیش حقوقی طراحی کنیم و اطلاعات رو ورد فراخوانی کنه و همون فایل رو به ایمیل افراد ارسال کنیم
ولی اگر فایل ارسالی برای هر فرد یه فایل متفاوتی هست همین روشی که شما آموزش دادید بهترین روش ممکن هست
👌