รบกวนสอบถามเรื่องส่ง Email ผ่าน Excel หน่อยครับ
Posted: Wed May 02, 2012 10:48 am
ตอนนี้ผมสามารถทำให้ส่งได้แล้ว (ไปลอกเขามา) แต่แค่รายเดียว และพยายามทำให้ส่งทีเดียวหลาย ๆ ราย แต่ยังทำไม่ได้ รบกวนช่วยดู Code ให้ด้วยครับ ขอบคุณครับ
คลังคำตอบแห่งความรู้จากคนไทย เพื่อโลกที่ต้องการเข้าใจในสิ่งเล็ก ๆ อย่างลึกซึ้ง
https://snasui.com/
Code: Select all
Private Sub CommandButton2_Click()
Dim OutlookApp As Object
Dim MItem As Object
Dim email_ As String
Dim s_email_ As String
Dim subject_ As String
Dim body_ As String
Dim rAll As Range
Dim r As Range
Dim l As Long
l = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rAll = Sheets("Sheet1").Range("A2:A" & l)
Set OutlookApp = CreateObject("Outlook.Application")
For Each r In rAll
email_ = r '¼ÙéÃѺ
s_email_ = r.Offset(0, 1) '¼ÙéÊè§
subject_ = r.Offset(0, 2) ' àÃ×èͧ
body_ = r.Offset(0, 3).Value ' ÃÒÂÅÐàÍÕ´ Email
Set MItem = OutlookApp.CreateItem(0)
With MItem
.SentOnBehalfOfName = s_email_
.To = email_
.Subject = subject_
.Body = body_ & Chr(13) & Chr(13) & Chr(13) & r.Offset(0, 4) _
& Chr(13) & r.Offset(0, 5) & Chr(13) & r.Offset(0, 6) & Chr(13) & r.Offset(0, 7)
.send
End With
Next r
OutlookApp = Nothing
MItem = Nothing
End Sub
ผมใช้วิธี Application.DisplayAlerts = False ก็ยังไ่ด้ครับ พอจะมีวิธีอื่นไหมครับsnasui wrote:ปัญหาเดียวกับกระทู้นี้
http://www.snasui.com/viewtopic.php?f=3&t=2426 สำหรับเครื่องผมไม่มีปัญหาเช่นว่านั้น ลองทดสอบ Code ของ Ron หรือ Code อื่น ๆ ใน Internet ดูครับ ติดตรงไหนก็ถามกันมาได้เรื่อย ๆ ครับ
Code: Select all
Private Sub CommandButton2_Click()
Application.DisplayAlerts = False
Dim OutlookApp As Object
Dim MItem As Object
Dim email_ As String
Dim s_email_ As String
Dim subject_ As String
Dim body_ As String
Dim rAll As Range
Dim r As Range
Dim l As Long
l = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rAll = Sheets("Sheet1").Range("A2:A" & l)
Set OutlookApp = CreateObject("Outlook.Application")
For Each r In rAll
email_ = r '¼ÙéÃѺ
s_email_ = r.Offset(0, 1) '¼ÙéÊè§
subject_ = r.Offset(0, 2) 'àÃ×èͧ
body_ = r.Offset(0, 3).Value 'ÃÒÂÅÐàÍÕ´ Email
Set MItem = OutlookApp.CreateItem(0)
With MItem
.SentOnBehalfOfName = s_email_
.To = email_
.Subject = subject_
.Body = body_ & Chr(13) & Chr(13) & Chr(13) & r.Offset(0, 4) _
& Chr(13) & r.Offset(0, 5) & Chr(13) & r.Offset(0, 6) & Chr(13) & r.Offset(0, 7)
.send
End With
Next r
OutlookApp = Nothing
MItem = Nothing
Application.DisplayAlerts = True
End Subhttp://www.add-in-express.com/docs/outl ... tomate.phpsnasui wrote:ลองทดสอบ Code ของ Ron ตาม Link นี้ครับ Using VBA send email
Code: Select all
Private Sub CommandButton2_Click()
Dim OutlookApp As Object
Dim MItem As Object
Dim email_ As String
Dim s_email_ As String
Dim subject_ As String
Dim body_ As String
Dim rAll As Range
Dim r As Range
Dim l As Long
OlSecurityManager.ConnectTo OutlookApp 'Runtime Eror 424 ตรงนี้ครับ
OlSecurityManager.DisableOOMWarnings = True
On Error GoTo Finally
l = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rAll = Sheets("Sheet1").Range("A2:A" & l)
Set OutlookApp = CreateObject("Outlook.Application")
For Each r In rAll
email_ = r '¼ÙéÃѺ
s_email_ = r.Offset(0, 1) '¼ÙéÊè§
subject_ = r.Offset(0, 2) 'àÃ×èͧ
body_ = r.Offset(0, 3).Value 'ÃÒÂÅÐàÍÕ´ Email
Set MItem = OutlookApp.CreateItem(0)
With MItem
.SentOnBehalfOfName = s_email_
.To = email_
.Subject = subject_
.Body = body_ & Chr(13) & Chr(13) & Chr(13) & r.Offset(0, 4) _
& Chr(13) & r.Offset(0, 5) & Chr(13) & r.Offset(0, 6) & Chr(13) & r.Offset(0, 7)
.send
End With
Next r
OutlookApp = Nothing
MItem = Nothing
Finally:
OlSecurityManager.DisableOOMWarnings = False
End SubCode: Select all
Option Explicit
Private Sub CommandButton2_Click()
Dim OutlookApp As Outlook.Application
Dim MItem As Object
Dim email_ As String
Dim s_email_ As String
Dim subject_ As String
Dim body_ As String
Dim rAll As Range
Dim r As Range
Dim l As Long
l = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rAll = Sheets("Sheet1").Range("A2:A" & l)
Set OutlookApp = Outlook.Application
For Each r In rAll
email_ = r
s_email_ = r.Offset(0, 1)
subject_ = r.Offset(0, 2)
body_ = r.Offset(0, 3).Value
Set MItem = OutlookApp.CreateItem(0)
With MItem
.SentOnBehalfOfName = s_email_
.To = email_
.Subject = subject_
.Body = body_ & Chr(13) & Chr(13) & Chr(13) & r.Offset(0, 4) _
& Chr(13) & r.Offset(0, 5) & Chr(13) & r.Offset(0, 6) & Chr(13) & r.Offset(0, 7)
.send
End With
Next r
End Subขอบคุณครับ และต้องขออภัยเรื่องการโพสต์ด้วยครับ ครั้งหน้าผมจะดำเนินการให้ถูกต้องครับ ขอบคุณอีกครั้งครับsnasui wrote:สำหรับ Link add-ins express ที่แนบมา ผมอ่านผ่าน ๆ เป็นการเขียน Code เพื่อทำเป็น Add-ins ด้วย Visual Studio แล้วค่อยนำมาทำเป็นไฟล์ Add-ins ซึ่งจะต้องติดตั้ง Add-ins ลงไปในเครื่องก่อนแล้วค่อยใช้งานและสามารถปลด Security Warning ได้
ลองทดสอบ Code ด้านล่างซึ่งผมปรับใหม่โดยไม่ต้อง Create Object ของ Outlook ขึ้นมาก่อนสำหรับการโพสต์ Code VBA ควรทำให้เป็น Code เพื่อจะได้ง่ายต่อการอ่านและ Copy ไปทดสอบ ดูวิธีการที่นี่ครับ viewtopic.php?f=6&t=1187Code: Select all
Option Explicit Private Sub CommandButton2_Click() Dim OutlookApp As Outlook.Application Dim MItem As Object Dim email_ As String Dim s_email_ As String Dim subject_ As String Dim body_ As String Dim rAll As Range Dim r As Range Dim l As Long l = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row Set rAll = Sheets("Sheet1").Range("A2:A" & l) Set OutlookApp = Outlook.Application For Each r In rAll email_ = r s_email_ = r.Offset(0, 1) subject_ = r.Offset(0, 2) body_ = r.Offset(0, 3).Value Set MItem = OutlookApp.CreateItem(0) With MItem .SentOnBehalfOfName = s_email_ .To = email_ .Subject = subject_ .Body = body_ & Chr(13) & Chr(13) & Chr(13) & r.Offset(0, 4) _ & Chr(13) & r.Offset(0, 5) & Chr(13) & r.Offset(0, 6) & Chr(13) & r.Offset(0, 7) .send End With Next r End Sub
ผมใช้ version 2003 มีแต่ Microsoft Outlook 11.0 Object Library ครับ พอ Add แล้ว Error ตามรูปครับ รบกวนด้วยครับ ขอบคุณครับsnasui wrote:ลอง Add Reference ของ Microsoft Outlook 12.0 Object Library ดูครับ
ลองใส่ .11 แล้ว error ครับsnasui wrote:เนื่องจากที่เครื่องผมไม่มีปัญหาเลยไม่สามารถเปลี่ยน Code แล้วทดสอบให้ได้
ลองปรับ Code จาก Outlook.Application เป็น Outlook.Application.11 ดูว่าสามารถทำงานได้หรือไม่ครับ
ขอบคุณครับ ผมนำโปรแกรมไปลองกับ Excel 2007 ก็รันได้ไม่มีปัญหาครับ แต่ผมจะลองศึกว่าวิธีการของ Ron ดูครับ ขอบคุณมากครับsnasui wrote:ปกติการ Register จะทำเมื่อมีการเพิ่ม Control อื่น ๆ เข้ามาใช้ ยกตัวอย่างเช่นตามกระทู้นี้ http://www.snasui.com/viewtopic.php?f=3&t=2420 สำหรับการส่งเมลเราไม่่ได้เพิ่ม Control ใด ๆ เข้ามาช่วยแต่สามารถเขียน Code อ้างถึง Object ที่มีอยู่แล้วมาใช้งาน
สำหรับ Version 2003 ผมเข้าใจว่าโปรแกรมไม่รู้จัก Object ตัวนั้น จึงฟ้องในลักษณะดังกล่าว ทางเลือกอื่น ๆ เพื่อเลี่ยง Object model guard security prompts คือไปกำหนด Macro Security ใน Outlook 2003 ให้เป็น Low หรือเปลี่ยนเป็น Code ของ Ron ตาม Link นี้ครับhttp://www.rondebruin.nl/cdo.htm