با سلام
دوستان گرامی و عزیز.آیا امکان ارسال ایمیل در اکسس از طریق outlook وجود دارد؟
منظورم اینه که یه سری داده از طریق یک کوئری از تیبل ها استخراج بشن و از طریق زدن دکمه،اطلاعات به صفحه ی outlook منتقل شده و بتوانیم ارسال کنیم
با سلام
دوستان گرامی و عزیز.آیا امکان ارسال ایمیل در اکسس از طریق outlook وجود دارد؟
منظورم اینه که یه سری داده از طریق یک کوئری از تیبل ها استخراج بشن و از طریق زدن دکمه،اطلاعات به صفحه ی outlook منتقل شده و بتوانیم ارسال کنیم
احتمالا این پرسش تکراری هست.
وقتی میشه مستقیم ارسال کرد چه نیازی هست که اول برنامه outlook باز بشه؟
فایل ضمیمه
ساختار کد ارسال ایمیل معین هست و ارتباطی به اینکه اطلاعات از کجا میاد نداره.
این شما هستین که باید اطلاعات رو بهش معرفی کنین:
DIM RS AS RECORDSET
SET RS=CURRENTDB.OPENRECORDSET("SELECT ..... FROM ... WHERE ...")
DO WHILE NOT RS.EOF
With OutMail
.To = RS("...")
.CC = RS("...")
.BCC = ""
.Subject = RS("...")
.Body = "Please review." & vbCrLf & vbCrLf & ActiveWorkbook.FullName
.ReadReceiptRequested = True
.Display 'or .Send
End With
RS.MOVENEXT
LOOP
در ضمن با DOCMD.SENDOBJECT هم میتونین ایمیل بفرستین.
جناب mazoolagh منتظر راهنماییتون هستم
اساتید گرامی
با سلام
با جستجوی فراوان در ایترنت تونستم این نمونه رو پیدا کنم که با شرایط درخواستی من مطابقت داره و نتیجه کوئری رو توی متن ایمیل میاره.(فایل پیوست رو واسه عزیزانی که نیاز دارند گذاشتم) فقط یه مشکلی برخوردم موقعی که ماژول رو به فایل خودم منتقل میکنم و کد ها رو روی دکمه ی خودم تعریف میکنم پیغام خطا میده.لازم به ذکره اصلا به کد ها دست نزدم.فقط جابجا کردم .علت این ارور چیه؟
Untitled.png
خب این نشدنیه!اما در قسمت Body،که میخوام چیزی رو بفرستم هیچی قبول نمیکنه و فقط میشه یه متن ثابت نوشت.مشکل من اینه.
یعنی اینکه فقط مقدار ثابت بگیره.
قطعا عبارتی که برای BODY میفرستین اشکال داره.
در مورد خطایی که تصویرش رو گذاشتین؛
شما برای تعریف آبجکتهایی که ذاتی اکسس نیستن دو راه دارین :
1- رفرنس لازم رو معرفی کنین - قبل از اجرای کد باید انجام بشه
Dim OLA As Outlook.Application
Set OLA=Outlook.Application
Dim OLM As Outlook.MailItem
Set OLM=OLA.CreateItem(olMailItem)
2- از اکسس بخواین در هنگام اجرا اون آبجکت رو بسازه
Dim OLA As Object
Set OLA=CreateObject("Outlook.Application")
Dim OLM As Object
Set OLM=OLA.CreateItem(0)
در هر دو حالت لازمه که کمپوننت مورد نیاز روی سیستم نصب باشه
این خطا به این برمیگرده که کد براساس رفرنس دهی نوشته شده و لازمه شما در برنامه تون این رفرنس رو لحاظ کنین.
در این حالت رفرنس باید به برنامه OUTLOOK باشه.
1.png
جالبه که در نمونه اولی که شما پیوست کرده بودین این رفرنس بود!
یک نمونه پیوست میکنم که هر دو روش در اون پیاده شده و بنابراین رفرنس به OUTLOOK هم داره
Public Function SendMail_1(ByVal xTO As String, _
Optional ByVal xCC As String = "", _
Optional ByVal xBCC As String = "", _
Optional ByVal xSUBJECT As String = "", _
Optional ByVal xBODY As String = "") As Boolean
On Error GoTo ErrorHandler
Dim OLA As outlook.Application
Set OLA = outlook.Application
Dim OLM As outlook.MailItem
Set OLM = OLA.CreateItem(olMailItem)
OLM.To = xTO
OLM.Subject = xSUBJECT
OLM.CC = xCC
OLM.BCC = xBCC
'OLM.BodyFormat = olFormatPlain
OLM.Body = xBODY
OLM.Send
SendMail_1 = True
Exit Function
ErrorHandler:
SendMail_1 = False
End Function
Public Function SendMail_2(ByVal xTO As String, _
Optional ByVal xCC As String = "", _
Optional ByVal xBCC As String = "", _
Optional ByVal xSUBJECT As String = "", _
Optional ByVal xBODY As String = "") As Boolean
On Error GoTo ErrorHandler
Dim OLA As Object
Set OLA = CreateObject("Outlook.Application")
Dim OLM As Object
Set OLM = OLA.CreateItem(0)
OLM.To = xTO
OLM.Subject = xSUBJECT
OLM.CC = xCC
OLM.BCC = xBCC
'OLM.BodyFormat = olFormatPlain
OLM.Body = xBODY
OLM.Send
SendMail_2 = True
Exit Function
ErrorHandler:
SendMail_2 = False
End Function
Public Function SendByID(ID As Long) As Boolean
On Error GoTo ErrorHandler
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("SELECT * FROM MAIL WHERE ID=" & ID)
RS.Edit
Dim v As Variant
RS("SENT") = SendMail_2(RS("EMAIL"), , , RS("SUBJECT"), RS("BODY"))
RS("TIMESTAMP") = Now
RS.Update
RS.Close
Set RS = Nothing
SendByID = True
Exit Function
ErrorHandler:
SendByID = False
End Function
بسیار عالی بود.متشکرم.مشکل حل شد.امیدوارم به کار دوستان هم بیاد.