Page 2 of 2
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Sun Dec 06, 2015 7:16 pm
by snasui

หากคีย์เข้าไปเองแล้วสามารถส่งได้ Code นั้นก็ควรจะส่งได้เช่นกันเพราะเป็นการให้โปรแกรมเติมค่าไฟล์ที่กำลังใช้งานให้เองแทนการคีย์
การที่ฟ้องเช่นนั้นแสดงว่ามีการเปิดใช้โดยโปรแกรมอื่นอยู่ครับ ที่แจ้งว่าคีย์เข้าไปเองนั้นเป็นการคีย์ค่าไฟล์ที่กำลังเปิดใช้งานปัจจุบันที่เก็บ Code นี้ไว้ใช่หรือไม่ หากใช่และส่งได้ ลองแนบไฟล์นั้นมา จะได้ช่วยดูต่อไปจากนั้นครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Sun Dec 06, 2015 8:31 pm
by nutpochan
ใช่ครับตอนที่คีร์เข้าไปเองก็เปิดไฟล์นั้นอยู่แท้ๆยังส่งได้ทั้งที่เปิดอยู่ แต่ตอนเขียนให้ไปอ้างอิงจากเซลดันฟ้องขึ้นมาซะงั้น
แนบไฟล์มาให้แล้วนะครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Sun Dec 06, 2015 9:33 pm
by snasui
CDO ไม่สามารถส่งไฟล์ที่เปิดอยู่ได้ครับ ดังนั้นที่แจ้งว่าคีย์เข้าไปเองและส่งได้นั้นน่าจะเข้าใจคลาดเคลื่อน
การส่งไฟล์แนบด้วย CDO ต้อง SaveAs ให้เป็นไฟล์ชื่ออื่นเสียก่อนแล้วค่อยแนบไฟล์นั้นไป เมื่อแนบแล้วค่อยลบทิ้ง
ตัวอย่าง Code ตามด้านล่างครับ
ประกาศตัวแปรเพิ่ม
Code: Select all
Dim wb As Workbook
Dim fileExtension As String
Dim tempPath As String
Dim tempName As String
กำหนดค่า
Code: Select all
Set wb = ThisWorkbook
fileExtension = VBA.Mid(wb.Name, InStr(1, wb.Name, ".xl"))
tempPath = VBA.Environ$("temp") & "\"
tempName = Replace(wb.Name, fileExtension, "") & " " & VBA.Format(Now, "dd-mmm-yy h-mm-ss")
wb.SaveCopyAs tempPath & tempName & fileExtension
แนบไฟล์
Code: Select all
objMsg.AddAttachment tempPath & tempName & fileExtension
ลบไฟล์ที่สร้างไว้ชั่วคราวทิ้ง
Code: Select all
Kill tempPath & tempName & fileExtension
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Sun Dec 06, 2015 10:07 pm
by nutpochan
ใช้ได้ผลแล้วครับ ขอบคุณครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 12:05 pm
by nutpochan
จากโค๊ดดังกล่าว ถ้าผมต้องการส่งไปหลายๆ เมลโดยที่มีlist mailใว้ที่ช้อง w1ถึงw10 ผมจะต้องแก้ไขสูตรเป็นอย่างไรครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 12:25 pm
by nutpochan
แนบโค๊ดมาให้อกทีนะครับ
Code: Select all
Sub Macro1()
' Object creation
Set objMsg = CreateObject("CDO.Message")
Set msgConf = CreateObject("CDO.Configuration")
' กำหนด Server Configuration
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "nutpochan1@gmail.com"
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "**********"
msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
msgConf.Fields.Update
'ประกาศตัวแปร
Dim wb As Workbook
Dim fileExtension As String
Dim tempPath As String
Dim tempName As String
'กำหนดค่า
Set wb = ThisWorkbook
fileExtension = VBA.Mid(wb.Name, InStr(1, wb.Name, ".xl"))
tempPath = VBA.Environ$("temp") & "\"
tempName = Replace(wb.Name, fileExtension, "") & " " & VBA.Format(Now, "dd-mmm-yy h-mm-ss")
'Saveไฟล์
wb.SaveCopyAs tempPath & tempName & fileExtension
' ส่ง Email
objMsg.To = "nutpochan1@gmail.com"
objMsg.From = "nutpochan1@gmail.com"
objMsg.bodypart.Charset = "utf-8"
objMsg.Subject = Cells(1, 18).Value
objMsg.HTMLBody = Cells(2, 18).Value
objMsg.Sender = "weerfdgsdfg"
objMsg.AddAttachment tempPath & tempName & fileExtension
Set objMsg.Configuration = msgConf
'ลบไฟล์ทิ้งต้องเอาไว้หลัง คำสั่งแนบไฟล์
Kill tempPath & tempName & fileExtension
' Send
objMsg.Send
' Clear
Set objMsg = Nothing
Set msgConf = Nothing
End Sub
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 6:10 pm
by snasui
nutpochan wrote:จากโค๊ดดังกล่าว ถ้าผมต้องการส่งไปหลายๆ เมลโดยที่มีlist mailใว้ที่ช้อง w1ถึงw10 ผมจะต้องแก้ไขสูตรเป็นอย่างไรครับ

กำหนดหนดตัวแปรเช่น
strEmail แล้วใช้การ Loop โดยนำทุกค่าในเซลล์เหล่านั้นมาเชื่อมต่อกันเป็นตัวแปร
strEmail จากนั้นค่อยกำหนด
objMsg.To เป็น
objMsg.To = strEmail ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 8:29 pm
by nutpochan
นอกจากนั้นแล้ว ในข้อความ ผมต้องการให้มีการแทรก hyperlink ยกตัวอย่างเช่น ถ้าผมพิม
www.google.com ผู้อ่านจะเห็นเป็นข้อความแต่ไม่สามารถกด ได้ ผมต้องแก้โค๊ดยังไงให้ ผู้อ่านสามารถกดlink คำว่า
www.google.comได้ครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 8:33 pm
by snasui

หากเป็น VBA ต้องปรับมาเองก่อนในทุกเรื่องที่ต้องการ ติดตรงไหนแล้วค่อยมาถามกันครับ
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 8:58 pm
by nutpochan
Code: Select all
objMsg.HTMLBody = Range("w2") & "<br>" & "<a href=range(q1)>"
ผมมพยายาม ปรับตามโค๊ดดังกล่าวแล้วแต่ ยังไม่ขึ้นครับ ไม่รู้ต้องแก้ตรงไหน ซึ่ง ในช่อง q1 นั้นจะเป็นคำว่า
http://www.google.com
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 9:00 pm
by nutpochan
Re: ผมพยายามใช้ vba ส่ง hotmail แต่ล้มเหลวครับ
Posted: Tue Jan 12, 2016 9:11 pm
by snasui

ตัวอย่าง Code ครับ
objMsg.HTMLBody = Range("w2") & "<br>" & "<a href=" & Range("q1").Value & ">" & Range("q1").Value & "</a>"