ปฏิเสธไม่ได้เลยว่าเรื่องการแจ้งเตือนจาก Excel ไปยัง Line หรือ Email เป็นสิ่งที่หลายๆ คนอยากรู้ แต่ยังทำไม่เป็น ไม่เป็นไรเดี๋ยวบทความนี้ผมจะอธิบายให้เอง
บอกไว้ก่อนว่าการทำ Notification จาก Excel ไปยังที่ต่างๆ นี่หลีกเลี่ยงไม่ได้ที่จะต้องใช้ VBA (การเขียนโปรแกรมใน Excel) นะครับ มันยังไม่มีวิธีอื่นที่ทำได้ และผมเองก็ไม่ได้เชี่ยวชาญการเขียน VBA มากนัก นั่นคือ ผมรู้หลักการ รู้แนวคิดว่าควรจะทำอะไร แต่จำ Code แทบไม่ได้เลย ต้อง Google หรืออัด Macro ไว้แก้ไขตลอด 555
เอาล่ะ เพื่อไม่ให้เสียเวลาเรามาเริ่มกันเลยที่การแจ้งเข้า Line กันก่อนละกัน (เพราะมันน่าสนใจกว่าไงล่ะ 555)
วิธีแจ้งเตือนเข้า Line
การจะแจ้งเตือนเข้า Line ได้นั้น เราจะใช้บริการที่ชื่อว่า Line Notify ซึ่งเป็นบริการที่เปิดให้เราสามารถส่งคำสั่งไปหา Line ได้ แต่ก็ต้องส่งในรูปแบบที่ Line กำหนดเป๊ะๆ นะ มันถึงจะเข้าใจ
*ทางเทคนิค คือ มันเป็นการส่งผ่าน API (Application Programming Interface) ที่ Line ออกแบบเอาไว้
สร้าง Token
ทาง Line เองก็มีการกำหนดไว้ด้วยว่าถ้าจะส่งข้อความเข้าไปได้ จะต้องมีรหัส Token ซะก่อน โดยที่เราสามารถไปสร้าง Token ได้ฟรีๆ ที่ https://notify-bot.line.me/en/
ให้เรากด Login ด้านขวาบนของหน้าจอ แล้ว Login line ของตัวเองลงไปซะ จากนั้นกดที่ชื่อแล้วไปที่ My Page หรือว่าหน้าของฉัน
จากนั้นเลื่อนลงมาข้างล่างแล้วกด Generate Token แล้วติ๊กเลือกปลายทางที่จะส่งไปหา (ในที่นี้ผมเลือกตัวเองแบบ 1-1) โดยที่เราจะต้องใส่ด้วยว่า Noti นี้จะให้ขึ้นข้อความว่าส่งมาจากไหน ซึ่งผมใส่คำว่า Noti by ThepExcel เอาไว้
จากนั้นกดปุ่ม Generate Token เขียวๆ ด้านล่าง (ถ้ามองไม่เห็นให้กด Zoom out ออกมาด้วย)
จากนั้นให้กด Copy Token ที่มันสร้างขึ้นเก็บเอาไว้ (เดี๋ยวต้องเอา Code นี้ไปใส่ใน Excel) อ่อ และอย่าเอา Token ของตัวเองไปบอกใครล่ะ เดี๋ยวโดนเอาไปทำอะไรไม่ดีซวยเลย
สร้าง Code VBA ใน Excel
จากนั้นให้เรากลับมาเปิดสร้างไฟล์ Excel ใหม่ขึ้นมาอันนึง แล้ว Save ให้เป็นนามสกุล .xlsm (Excel Macro-Enabled Workbook) ด้วย ไม่งั้นมันจะใช้ VBA ไม่ได้
จากนั้นกด Alt+F11 เพื่อเปิดหน้าต่าง VBA ขึ้นมา
จากนั้นให้กดสร้าง Module ขึ้นมา โดยคลิ๊กขวาแล้วทำตามรูป
แล้วก็ทำการ Paste Code นี้ลงไป (Copy ตั้งแต่แถว 1 ที่เป็นคำว่า sub นะ…)
Sub LineNotify()
Dim LineToken As String
Dim lineMessage As String
Dim objectXML As Object
Dim URL As String
'========================================
'Line Notify Token ที่ Generate มา
LineToken = "ใส่tokenของตัวเอง"
'Line Message
yourMessage = "ใส่ข้อความของตัวเอง"
'========================================
lineMessage = "message=" & yourMessage
Set objectXML = CreateObject("Microsoft.XMLHTTP")
URL = "https://notify-api.line.me/api/notify"
With objectXML
.Open "POST", URL, 0
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.SetRequestHeader "Authorization", "Bearer " & LineToken
.send (lineMessage)
Debug.Print objectXML.responseText
End With
Set objectXML = Nothing
End Sub
จากนั้นผมแก้ 2 จุดนี้
- LineToken =”k5e5PVIMI1vCGgAxxxxxxxxxxxxx”
- yourMessage =”ThepExcel สอนส่ง Noti เข้า Line”
ปล. code พวกนี้เป็นคำสั่งที่ line ต้องการในการสื่อสารทาง API ซึ่งอ้างอิงจากเอกสารนี่ (ใช้วิธีการ POST)
ทดสอบส่ง Notification เข้า Line
ให้เราคลิ๊กตรง code ตรงไหนก็ได้ในหน้า VBA Editor แล้วกดปุ่ม F5 เพื่อ Run Code
ถ้ามันสำเร็จ จะมี line ส่งมาหาเราด้วยข้อความที่เราใส่ทันที!!
ปรับ Code ให้สะดวกและเจ๋งขึ้น
ให้เราลองเปลี่ยน Code เป็นอันนี้แทน เพื่อให้สามารถเรียกคำสั่งได้สะดวกขึ้นด้วยการเรียก Sub Procedure ใน VBA (อย่าลืมแก้ Token ล่ะ)
Sub test_noti()
Call LineNotify("ใส่ข้อความของตัวเอง", stickerID, stickPackID)
End Sub
Sub LineNotify(msg As String, Optional stickID As Integer, Optional stickPack As Integer)
Dim LineToken As String
Dim lineMessage As String
Dim objectXML As Object
Dim URL As String
'========================================
'Line Notify Token ที่ Generate มา
LineToken = "ใส่tokenของตัวเอง"
'========================================
'Line Message
yourMessage = msg
lineMessage = "message=" & yourMessage
'========================================
'เพิ่มเงื่อนไข Sticker
If stickPack = 0 Or stickID = 0 Then
Else
lineMessage = lineMessage & "&stickerPackageId=" & stickPack & "&stickerId=" & stickID
End If
'========================================
Set objectXML = CreateObject("Microsoft.XMLHTTP")
URL = "https://notify-api.line.me/api/notify"
With objectXML
.Open "POST", URL, 0
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.SetRequestHeader "Authorization", "Bearer " & LineToken
.send (lineMessage)
Debug.Print objectXML.responseText
End With
Set objectXML = Nothing
End Sub
คราวนี้เราจะแก้ข้อความที่ข้างบนสุดเอาได้เลย และสามารถใส่ Sticker ได้ด้วย โดยต้องระบุ Sticker ID และ Sticker Package ID ที่ต้องการ โดยดูรายชื่อ Sticker ที่นี่
จากคำสั่งนี้
Call LineNotify(“ใส่ข้อความของตัวเอง”, stickerID, stickPackID)
โดยแก้เป็น
Call LineNotify("อย่าลืมกด Like&Share เทคนิคจาก ThepExcel นะ ", 4,1)
จากนั้นคลิ๊กตรงส่วนบน ใน Sub test_noti() แล้วกดปุ่ม F5 เพื่อ Run Code
จะเห็นว่ามีทั้งข้อความและ Sticker เลย
การส่งยืดหยุ่นขึ้นมาก
แต่ถ้าอยากส่งแต่ข้อความ ก็ใส่แต่ข้อความได้เลย
นอกจากนี้ Sub test_noti() จะใส่ Call LineNotify หลายรอบก็ได้ เช่น
Sub test_noti()
Call LineNotify("ตอนนี้ยาวมากแล้ว ขอจบเท่านี้ดีกว่า ไว้ติดตามต่อตอนหน้านะ")
Call LineNotify("ขอบคุณทุกคนมากที่ติดตามอ่าน สวัสดีครับ", 125, 1)
End Sub
จากนั้นกด F5 ก็จะมี Line ส่งมาดังนี้
ไว้ตอนหน้าเราจะมาลุยเรื่อง Email กันต่อ รวมถึงการปรับให้มันส่งเมื่อมี event บางอย่างเกิดขึ้น เช่น ถึงวันครบกำหนด หรือ เมื่อมีคนกดปุ่มบางอย่างก็ได้ และเราอาจทำอะไรเจ๋งๆ กับ Line ได้อีกนะ ไว้ติดตามต่อไปนะครับ