2016-01-07 5 views
1

У меня есть следующий код:Отправить Attachment Доступ поле как CDO Attachment с VBA

Option Compare Database 
Private Sub Command27_Click() 

Dim fso, f 
Set fso = CreateObject("scripting.FileSystemObject") 
Set f = fso.OpenTextFile("M:\Instructor Letter Templates (Typical).htm") 
InstructorText = f.ReadAll 
f.Close 
Set f = Nothing 
Set fso = Nothing 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim sql As String 

Dim strWhere As String 

Set db = CurrentDb() 
sql = "SELECT Classes.ClassID, Grade.GradeID, Instructors.RiosaladoEmail, students.sLastName, students.sFirstName, Grade.Form, Grade.Printout FROM students INNER JOIN (Classes INNER JOIN (Instructors INNER JOIN Grade ON Instructors.InstructorID = Grade.[Instructor]) ON Classes.ClassID = Grade.ClassID) ON students.StudentID = Grade.StudentID WHERE Grade.DateProcessed=Date()" 
Set rs = db.OpenRecordset(sql, dbOpenDynaset) 

Do Until rs.EOF 

Dim Class As String 
Dim Grade As String 
Dim Email As String 
Dim Today As String 
Dim sLast As String 
Dim sFirst As String 
Dim Form As String 


Class = rs("ClassID") 
Grade = rs("GradeID") 
Email = rs("RiosaladoEmail") 
sLast = rs("sLastName") 
sFirst = rs("sFirstName") 
Form = rs("Form") 

Const cdoSendUsingPickup = 1 
Const cdoSendUsingPort = 2 
Const cdoAnonymous = 0 
Const cdoBasic = 1 
Const cdoNTLM = 2 

Set cdomsg = CreateObject("CDO.Message") 
cdomsg.Subject = sLast & "," & sFirst & Class & Chr(32) & Form 
cdomsg.FROM = "<[email protected]>" 
cdomsg.To = Email 
cdomsg.HTMLBody = InstructorText 
cdomsg.AddAttachment 


cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 

'Name or IP of Remote SMTP Server 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" 

'Type of authentication, NONE, Basic (Base64 encoded), NTLM 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic 

'Your UserID on the SMTP server 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "MyEmail" 

'Your password on the SMTP server 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "MyPW" 

'Server port (typically 25) 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 

'Use SSL for the connection (False or True) 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True 

'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server) 
cdomsg.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 

cdomsg.Configuration.Fields.Update 

cdomsg.Send 

rs.MoveNext 
Loop 

Set rs = Nothing 
Set db = Nothing 

End Sub 

В запросе поле «Grade.Printout» является поле Access вложение с файлом прилагается к нему .. в таблице.

Я хочу использовать это поле с помощью cdomsg.AddAttachment ... Я знаю, что если я использую «cdomsg.AddAttachment (« »),« я могу прикрепить определенный путь к файлу ... но я хочу использовать вложение поле внутри Access.

Или есть лучший способ сделать это? Любые предложения были бы замечательными, спасибо!

ответ

3

Метод CDO AddAttachment должен указывать местоположение прикрепляемого файла и не имеет способа распознать ссылку на таблицу/поле Access. Поэтому вам необходимо сохранить вложение Access во временное местоположение с помощью метода SaveToFile объекта Access DAO Field2, а затем передать путь этого файла методу AddOttachment CDO.