วันพุธที่ 13 พฤศจิกายน พ.ศ. 2556

ส่งเมลด้วย VBA ใน Excel ผ่าน Outlook

สมมุติว่า ใน Sheet ชื่อ users มีอีเมล์ ตั้งแต่เซลล์ B6:B20 และต้องการส่งเมล ไปยังอีเมลเหล่านั้น โดยใช้ Outlook จะทำอย่างไร หลักการ ก่อนอื่น ต้องทำการ Config โปรแกรม Outlook ให้สามารถใช้งานได้ก่อน โดยกำหนดว่าจะใช้ Serve ใดเป็นตัวส่งเมล์ จากนั้นจึง เปิด Excel ทำการอ้างอิงไปที่ Microsoft Outlook Object Library แล้วเขียนโค้ดส่งเมล์ และแนบกับปุ่ม เมื่อคลิกปุ่ม จะทำการส่งเมลทั้งหมดที่อยู่ในเซลล์ B6:B20

วิธีการ
  1. เปิด Excel 2010 และเรียกเมนู ผู้พัฒนา โดยไปที่ แฟ้ม > ตัวเลือก > กำหนด Ribbon เอง และเลือก ผู้พัฒนา
  2. อ้างอิง Outlook Object Library ให้เปิดหน้าจอเขียนโค้ด (กด Alt+F11) (หรือ นักพัฒนา > แสดงโค้ด ) แล้วไปที่ Tools > References และเลือก Library ที่ต้องการ
  3. สร้างโมดุลใหม่ โดยไปที่ เมนู Insert > Module
  4. ดับเบิ้ลคลิกที่ Module1 และสร้าง Procedure การเรียกใช้งาน Outlook ดังนี้
    Sub sendMyMail(addrss As String)
        Dim OutApp As Object
        Dim OutMail As Object
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next
        With OutMail
            .To = addrss
            .CC = ""
            .BCC = ""
            .Subject = "ทดสอบ"
            .Body = "ส่งเมลด้วย Excel VBA ผ่าน Outlook"
    '      แนบไฟล์
            .Attachments.Add ("C:tmp\myPic.png")
            .Send
        End With
        On Error GoTo 0
        Set OutMail = Nothing
        Set OutApp = Nothing
    End Sub
  5. สร้าง Procedure สำหรับอ่านข้อมูล และเรียกใช้งาน Outlook ดังนี้

    Sub readDataAndSend()
    Dim Counter As Long
    Counter = 6 ' ข้อมูลเริ่มแ 6
    'ให้อ่านจนหมดทุกอีเมล์ -- แต่ละอีเมล์ต้องติดกันจะเว้นแถวไม่ได้
    Do Until ActiveWorkbook.Sheets("users").Cells(Counter, 2).Value = ""
        sendMyMail ActiveWorkbook.Sheets("users").Cells(Counter, 2).Value
        Counter = Counter + 1
    Loop
    End Sub
  6. บันทึกไฟล์ เป็นนามสกุล xlsm
  7. สร้างปุ่ม สำหรับเรียกใช้งาน โดยกลับไปหน้าจอปกติ และเลือก แถบเมนู แทรก > รูปร่าง และเขียนข้อความ ดังภาพ
  8. คลิกขวาที่ปุ่มที่สร้าง และเลือก กำหนดแมโคร
  9. เลือก readAndSend แล้วกดตกลง
  10. เป็นอันเสร็จ เมื่อคลิกปุ่มนี้ Excel จะเรียน Outlook และทำการส่งอีเมลในคอลัมน์ B ที่มีอยู่ทั้งหมด



อ้างอิง
http://msdn.microsoft.com/en-us/library/office/ff458119(v=office.11).aspx#odc_office_UseExcelObjectModeltoSendMail_Introduction

1 ความคิดเห็น:

  1. ถ้าจะให้ตรง body โชว์รูปด้วยต้องทำงัยครับ

    ตอบลบ