เทพเอ็กเซล ช่วย "ปลุกเทพ Excel ในตัวคุณ"
0
  • No products in the cart.
Excel VBA

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 1

ในตอนที่แล้วเราใช้ Excel VBA ส่งข้อความแจ้งเตือนเข้า Line กันไปแล้ว (แต่ยังไม่จบนะ) ในตอนนี้เราจะขอสลับฉากมาดูวิธีส่งเข้า Email กันบ้างครับ 555

การส่งบางอย่างจาก Excel เข้า Email ผมขอแบ่งออกเป็น 4 วิธีหลักๆ ดังนี้

  1. ใช้ Insert Hyperlink
  2. ใช้สูตร HYPERLINK
  3. ใช้ VBA ส่งผ่าน Outlook
  4. ใช้ VBA ส่งผ่านช่องทางอื่นๆ เช่น Gmail

เรามาดูแต่ละวิธีกันครับ เพราะมันไม่เหมือนกันเลย…

เน้นย้ำว่านี่เป็นวิธีส่งข้อความจาก Excel ผ่านบริการ Email ของผู้ให้บริการต่างๆ ไปที่ปลายทาง ซึ่งคนรับปลายทางเป็นเมลอะไรก็ได้นะครับ แต่คนส่งเป็นวิธีตามที่ผมบอกนี้

ปล. บทความนี้ยาวมาก ถ้าไม่อยากอ่านทั้งหมดให้กดไปดูวิธีที่ตัวเองสนใจได้เลย

ใช้ Insert Hyperlink

วิธีนี้ง่ายสุด แต่ก็ทำอะไรได้น้อยสุดด้วย เพราะมันแค่ส่งข้อความบางอย่างจาก Excel เข้าโปรแกรมเมลของเราแล้วโปรยในช่องจะส่งหาใคร? subject อะไร? แล้วเปิดโปรแกรมเมลค้างไว้อย่างงั้น รอให้เรากดปุ่มส่งเองอีกที

วิธีทำที่ง่ายสุดๆ ก็ดังนี้

  1. ให้พิมพ์ข้อความใน Cell ซักอันว่า Send Mail แล้วคลิ๊กขวา Insert Link…/Hyperlink => Email Address
  2. ใส่ข้อมูล Email ปลายทาง และ Subject ที่ต้องการ แล้ว ok
    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 2
  3. จะได้ผลลัพธ์ออกมาดังรูปเลย
    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 3

ใช้สูตร HYPERLINK

มาดูวิธีถัดไปกัน ซึ่งอันนี้จะดีขึ้นมากว่าวิธีแรกอีกนิดนึง 555

=HYPERLINK(link_location,friendly_name)

สูตรนี้มี input แค่ 2 ตัว คือ link_location กับ friendly_name ซึ่ง friendly_name ก็คือจะให้แสดงข้อความที่เป็นตัว link ว่าอะไร? ในที่นี้ผมจะให้เป็น Send Mail จากสูตร

ตัวที่ยุ่งยากคือ link_location ต่างหาก ซึ่งการจะส่งเมลต้องใส่ link_location ในรูปแบบดังต่อไปนี้

 mailto:ที่อยู่ผู้รับ?subject=ข้อความหัวข้อเมล&body=ข้อความเนื้อหา

เช่น ถ้าผมเขียนว่า

 mailto:Test123@gmail.com?subject=ทดสอบจาก Hyperlink&body=ข้อความเนื้อหา จาก Hyperlink

จะได้ว่า

=HYPERLINK("mailto:Test123@gmail.com?subject=ทดสอบจาก Hyperlink&body=ข้อความเนื้อหา จาก Hyperlink","Send Mail จากสูตร")

หากลองกดที่ปุ่มดูจะได้ผลดังรูป

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 4

ซึ่งเราก็สามารถ Link สูตรกับข้อความใน Cell ได้ดังนี้

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 5
=HYPERLINK("mailto:"&C4&"?subject="&C5&"&body="&C6,"Send Mail จากสูตร")

แต่พอกดปุ่ม ปรากฏว่าที่เรากดขึ้นบรรทัดใหม่ไว้ มันไม่ยอมขึ้นบรรทัดใหม่ด้วย

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 6

ทางแก้คือ เราต้องทำการใส่สัญลักษณ์พิเศษในการขึ้นบรรทัดใหม่ด้วย นั่นคือ %0D%0A

ดังนั้นเราจะทำการใช้ฟังก์ชัน SUBSTITUTE แทนการกด Alt+Enter ซึ่งก็คือ CHAR(10) ด้วยสัญลักษณ์พิเศษ คือ %0D%0A ดังนี้ โดยผมสร้างข้อความ body ขึ้นมาใหม่ในช่อง C7 ด้วยสูตร

=SUBSTITUTE(C6,CHAR(10),"%0D%0A")

แล้วแก้สูตร HYPERLINK ให้ไปเอาค่า Body จาก C7 แทน

=HYPERLINK("mailto:"&C4&"?subject="&C5&"&body="&C7,"Send Mail จากสูตร")

จะเห็นว่าเมื่อกดปุ่มแล้ว ผลลัพธ์ทุกอย่าง OK ละ มีการขึ้นบรรทัดใหม่ตามที่กด Alt+Enter ใน Excel เลย

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 7

ใช้ VBA ส่งผ่าน Outlook

วิธีนี้เหมาะกับคนส่งที่ใช้ Outlook เป็น Email นะครับ อาจจะเป็นเมลบริษัทอะไรแบบนี้ ซึ่งผมว่าเว็บนี้เขียนไว้ดี งั้นผมขอเอาเนื้อหามาดัดแปลงเลยนะครับ

วิธีส่งข้อความเข้าไปแสดงใน Outlook

เอาแบบรวบรัดเลยนะ ถ้าเราอยากจะส่งข้อความบางอย่างเข้าไปแสดงผลในโปรแกรม Outlook ให้ทำดังนี้

ป.ล. ตอนแรกเราจะทำแบบให้มันเด้งหน้าต่างขึ้นมาให้เรากดส่งเองก่อน เพื่อจะทำสอบความถูกต้องของผลลัพธ์ ไว้ถ้ามันถูกแล้ว เราจะให้มันส่งเมลโดยที่ไม่ต้องเด้งหน้าต่างมาเลย

ให้เราสร้าง Module ใน VBA (วิธีเดียวกับบทความที่แล้ว) แล้วปะ Code นี้ลงไป แล้วลองกด F5 เพื่อ Run ดูครับ

Sub SendOutlook()
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "ที่อยู่เมลปลายทาง"
        .Subject = "ส่งจาก Excel VBA"
        .Body = "ข้อความจาก Excel VBA"
        .Display   		' DISPLAY MESSAGE.
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
End Sub

ถ้ารันสำเร็จก็จะเปิดหน้าต่าง Outlook ออกมา

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 8

Tips : ถ้าใครกดแล้วไม่ติด ลองไปที่ Option ใน VBA -> References… -> ติ๊ก Microsoft Outlook xx.x Object Library เพิ่มดูนะครับ (แต่ผมไม่ได้ติ๊กยังใช้ได้เลย)

วิธีเพิ่มไฟล์แนบลงไป

ในระหว่าง With objEmail … กับ End With สามารถเพิ่มคำสั่งนี้ได้ครับ

.Attachments.Add ("ที่อยู่ไฟล์")

เช่น

.Attachments.Add ("d:\thepexcel\ประวัติวิทยากร-ศิระ-เทพเอ็กเซล-new2020.pdf")

สรุป คือ

Sub SendOutlook()
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "ที่อยู่เมลปลายทาง"
        .Subject = "ส่งจาก Excel VBA"
        .Body = "ข้อความจาก Excel VBA แบบมีไฟล์แนบ"
        .Attachments.Add ("ที่อยู่ไฟล์แนบ")
        .Display   		' DISPLAY MESSAGE.
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
End Sub

พอกด F5 ก็จะเห็นว่ามีหน้าต่างเด้งขึ้นมา และคราวนี้มีไฟล์แนบด้วยล่ะ!!

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 9

หลังจากนั้นจะลองกดปุ่ม Send ดูก็ได้ ว่ามันไปถูกต้องแล้วรึยัง? ถ้าถูกต้องแล้วเดี๋ยวเราจะทำ Step ถัดไปให้มันส่งไปเองโดยเราไม่ต้องขึ้นหน้าต่าง Outlook มาให้กดปุ่มเลย

วิธีให้มันส่งเมลเลย โดยที่ไม่ต้องเด้งหน้าต่างขึ้นมา

หลังจากทดสอบความถูกต้องหมดแล้วว่ามันได้ผล คราวนี้เราจะแก้ Code นิดหน่อย

โดยจะเปลี่ยนจาก

.Display    ' DISPLAY MESSAGE.

เป็น

.Send     ' SEND MESSAGE AUTO. 

สรุปคือ code สุดท้าย จะเป็นดังนี้

Sub SendOutlook()
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "ที่อยู่เมลปลายทาง"
        .Subject = "ส่งจาก Excel VBA AUTO"
        .Body = "ข้อความจาก Excel VBA แบบมีไฟล์แนบ แบบ Auto"
        .Attachments.Add ("ที่อยู่ไฟล์แนบ")
        .Send     ' SEND MESSAGE AUTO.
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
End Sub

จากนั้นกด F5 เพื่อ Run Code จะพบว่ามี email ส่งไปยังปลายทางได้ทันที !!

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 10

ใช้ VBA ส่งผ่านช่องทางอื่นๆ เช่น Gmail

เอาล่ะ มาถึงวิธีสุดท้ายแล้ว นั่นคือ เราจะส่ง Email แบบ Auto ด้วยคนส่งที่ใช้ Gmail กันล่ะ!!

ซึ่งส่วนนี้ผมขอดัดแปลงจากเว็บนี้ครับ

ขั้นตอนแรกคือ Add Library ก่อน

การจะใช้วิธีนี้ได้ ต้องไป Add Library พิเศษก่อน โดยไปที่ ไปที่ Option ใน VBA -> References… -> ติ๊ก Microsoft CDO for Windows 2000 Library

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 11

ต่อไปคือ Allow Less Secure App

ให้ไปที่ https://www.google.com/settings/security/lesssecureapps แล้วเปิดคำสั่ง “Allow less secure apps”

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 12

ปล. ถ้า Account Google ของเราเปิดโหมด 2-Step Verification เอาไว้ จะทำให้ใช้ Allow Less Secure Apps ไม่ได้นะ ต้องไปปิดโหมดนี้ก่อน ซึ่งก็จะอันตรายขึ้นนะ

ใส่ Code VBA

สร้าง Module ใหม่แล้ว Copy Code นี้ลงไป

Sub SendGmail()

Dim Mail As CDO.Message
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim strAttach As String
Dim GmailAccount As String
Dim GmailPassword As String
Dim msURL As String

'เปลี่ยน code ที่นี่'============

GmailAccount = "ที่อยู่gmailของคุณ"
GmailPassword = "password gmail ของคุณ"

strSubject = "ทดสอบยิง Gmail จาก Excel VBA"
strFrom = GmailAccount
strTo = "emailปลายทาง"
strCc = ""
strBcc = ""
strBody = "เนื้อหาการทดสอบ"
strAttach = "ที่อยู่ไฟล์แนบ"

'เปลี่ยน code ที่นี่'============

'creating a CDO object

   Set Mail = New CDO.Message
   msURL = "http://schemas.microsoft.com/cdo/configuration"
   
   With Mail.Configuration.Fields

       'Enable SSL Authentication
       .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    
       'Make SMTP authentication Enabled=true (1)
       .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    
       'Set the SMTP server and port Details
       'Get these details from the Settings Page of your Gmail Account
       .Item(msURL & "/smtpserver") = "smtp.gmail.com"
       .Item(msURL & "/smtpserverport") = 465
       .Item(msURL & "/sendusing") = 2
    
       'Set your credentials of your Gmail Account
       .Item(msURL & "/sendusername") = GmailAccount
       .Item(msURL & "/sendpassword") = GmailPassword
       'Update the configuration fields
       .Update
   
   End With

   'Set All Email Properties
   With Mail
      .Subject = strSubject
      .From = strFrom
      .To = strTo
      .CC = strCc
      .BCC = strBcc
      .TextBody = strBody
      .AddAttachment (strAttach) 'To attach Documents in mail
   End With
   'to send the mail
   Mail.Send

End Sub

จากนั้นเปลี่ยนพวก User/Pass และรายละเอียดของเมลเอาเองนะ ผมเขียนเอาไว้ใน section ‘เปลี่ยน code ที่นี่’============ แล้ว

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 13

จากนั้นกด F5 เพื่อ Run จะเก็นว่ามี Email ส่งได้แล้ว

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 14

แต่ถ้าใครขึ้นแบบนี้ แสดงว่ายังไม่ได้ไป enable คำสั่ง Allow Less Secure App นะครับ

วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 15

ถ้าไม่ใช่ Gmail ต้องทำยังไง?

ถ้าจะส่งผ่านผู้ให้บริการรายอื่น เราต้องไปแก้ค่าใน Config ของ SMTP Server เช่นพวก Server/Port ดังนี้

smtpserversmtpserverport
Gmail smtp.gmail.com465
Yahoo smtp.mail.yahoo.com465
Office 365 smtp.office365.com587
Hotmail/Windows Live smtp.live.com587

สำหรับบทความนี้ที่ยาวมากๆ ก็ขอจบเพียงเท่านี้

เดี๋ยวตอนหน้าเราจะเริ่มเอาความรู้จากทั้งสองตอนเข้ามาประยุกต์กับงานจริงมากขึ้นแล้ว เช่น แจ้งเตือนเมื่อเกิดเหตุการณ์บางอย่างในไฟล์ Excel เช่น Refresh ข้อมูลเสร็จ กรอกข้อมูลเสร็จตามกำหนด หรือว่า อาจมีงานที่ใกล้จะถึง Due Date ที่กำหนดไว้เป็นต้น

แชร์ความรู้ให้เพื่อนๆ ของคุณ
  • 1.3K
  •  
  •  
  •  
  •  
  • 1.3K
  •  
  •  
  •  
  •  
Sira Ekabut
the authorSira Ekabut
• Microsoft Office Specialist : Excel ระดับ Expert • ก่อตั้งเว็บไซต์และ แฟนเพจเทพเอ็กเซล คนติดตาม 8 หมื่นคน+, คลิปวีดีโอ 1 ล้าน Views + • หนังสือ Best Seller คอมพิวเตอร์ : Excel Level Up! , จอมเวท เทพ Excel , Excel Power Up!วิทยากรใน SkillLane.com คอร์สออนไลน์ชั้นนำ / อบรม Excel ให้บริษัทชั้นนำ

Leave a Reply