By kylejohnson95757@gmail.com ในวันศุกร์ที่ 01 มีนาคม 2019
โพสต์ใน Excel
ตอบกลับ 0
การกดไลค์ 0
เข้าชม 3.2K
โหวต 0
สวัสดี
ฉันยังใหม่กับ VBA ฉันเขียนรหัสเพื่อส่งอีเมลหากมีการเปลี่ยนแปลงค่าของเซลล์ในคอลัมน์ F และรหัสก็ใช้งานได้ดี แต่ฉันต้องการให้แน่ใจว่าสมุดงานได้รับการบันทึกก่อนที่จะส่งอีเมล เนื้อหาข้อความอีเมลต้องรวมค่าเซลล์อ้างอิง ซึ่งเป็นค่าจากคอลัมน์ A ของค่าที่เปลี่ยนแถว กรุณาอย่าใช้ msg มันจะไม่ทำงานกับสมุดงาน เวิร์กบุ๊กมีแบบฟอร์มและจะโหลดค่าอินพุตไปยังเซลล์ที่กำหนด รหัสทำงานได้ดีกับแบบฟอร์ม แต่ถ้ามีคนเข้าไปในชีตและอัปเดตค่าด้วยตนเอง อีเมลจะส่งถึงผู้ใช้ ซึ่งฉันไม่ต้องการจนกว่าไฟล์จะถูกบันทึก กรุณาช่วย! ขอบคุณล่วงหน้า.

Worksheet_Change ย่อยส่วนตัว (เป้าหมายเป็นช่วง ByVal)
Dim s1, s2, s3, s4, s5, s6 เป็นช่วง
ตั้งค่า s1 = ช่วง ("F1310:F1334")
ตั้งค่า s2 = ช่วง ("F1426:F1450")
ตั้งค่า s3 = ช่วง ("F1339:F1363")
ตั้งค่า s4 = ช่วง ("F1455:F1479")
ตั้งค่า s5 = ช่วง ("F1368:F1392")
ตั้งค่า s6 = ช่วง ("F1397:F1421")
เกี่ยวกับข้อผิดพลาดต่อไป
ถ้า Target.Cells.Count > 1 แล้วออกจาก Sub
'ค้นหาค่าที่เปลี่ยนแปลงในคอลัมน์ F
ถ้า Intersect(Target, Union(s1, s2, s3, s4, s5, s6)) Is Nothing แล้วออกจาก Sub
ถ้า IsNumeric(Target.Value) และ Target.Value <> "" แล้ว
Dim xOutApp เป็นวัตถุ
Dim xOutMail เป็นวัตถุ
Dim xMailBody เป็นสตริง
Dim xMailText เป็นสตริง
ตั้งค่า xOutApp = CreateObject("Outlook.Application")
ตั้งค่า xOutMail = xOutApp.CreateItem(0)
'ค่าดัชนีจากคอลัมน์ A ของแถวที่ค่าเปลี่ยนเป็นรวมอยู่ในเนื้อหาเมล
xMailText = Target.Offset(, -5).Value
xMailBody = "สวัสดี" & vbNewLine & vbNewLine & _
"ได้รับใบแจ้งหนี้สำหรับ" & xMailText & vbNewLine & vbNewLine & _
"ขอบคุณ" & vbNewLine & vbNewLine & _
“คุณเจ”
เกี่ยวกับข้อผิดพลาดต่อไป
ด้วย xOutMail
.To = "test@gmail.com"
.CC = ""
.BCC = ""
.Subject = "ได้รับใบแจ้งหนี้แล้ว"
.Body = xMailBody
.ส่ง
จบด้วย
เมื่อเกิดข้อผิดพลาด GoTo 0
ตั้งค่า xOutMail = Nothing
ตั้งค่า xOutApp = Nothing
End If
ย่อยสิ้นสุด
ดูโพสต์แบบเต็ม