Vba 从Access表发送附件字符串

Vba 从Access表发送附件字符串,vba,ms-access,outlook,Vba,Ms Access,Outlook,我有一个数据库,其中存储了我客户的医疗申报表 表单存储在外部文件夹(c:\…\medical form)中,标题为(DDMMYYYY Fname Lname)。此文件名(不是strpath)数据存储在[med forms]中 在父窗体(courses)上,我试图在子窗体[courses customer subform]上放置一个循环浏览[med forms]的按钮,将它们附加到一封电子邮件,然后发送给我 我在表单中循环并连接strpath和strfile以附加这些文档时遇到了一些问题,由于我缺

我有一个数据库,其中存储了我客户的医疗申报表

表单存储在外部文件夹(
c:\…\medical form
)中,标题为(
DDMMYYYY Fname Lname
)。此文件名(不是strpath)数据存储在
[med forms]

在父窗体(
courses
)上,我试图在子窗体
[courses customer subform]
上放置一个循环浏览
[med forms]
的按钮,将它们附加到一封电子邮件,然后发送给我

我在表单中循环并连接
strpath
strfile
以附加这些文档时遇到了一些问题,由于我缺乏编码知识,我现在感到困惑

希望你们中的一个可爱的人能帮上忙

Dim appOutLook As Outlook.Application
Dim MailOutLook As Outlook.MailItem
Dim strpath As String
Dim strfile As String
Dim varSubject As Variant
Dim varGroup As Variant
Dim varBody As Variant
Dim stratt As String
strpath = "C:\...\Medical forms"
varSubject = "Med forms " & (Me.[Title]) & (Me.[Start])
varBody = "email body TBC"
    With Me.[courses customer subform].Form.RecordsetClone
    If (.RecordCount) Then
        .MoveFirst
        Do Until .EOF
            If Len(![Med form]) Then
                stratt = stratt & strpath & ![Med form]
            End If
        .MoveNext
        Loop
        If Len(strEmail) Then

    Set appOutLook = CreateObject("Outlook.Application")
    Set MailOutLook = appOutLook.CreateItem(olMailItem)

    With MailOutLook
        .BodyFormat = olFormatRichText
        .To = "info@myemail.co.uk"

        .Subject = varSubject
        .HTMLBody = varBody
        .Attachments.Add (strpath & strfile)
        .Display
    End With
End sub

由于您已经在使用后期绑定(
CreateObject(“Outlook.Application”)
),我建议您在子系统的其余部分使用后期绑定(避免添加库引用),并建议您遵循以下几点:

Sub EmailForms()
    Dim strPth As String: strPth = "C:\...\Medical forms\"
    Dim strSub As String: strSub = "Med forms " & Me.[Title] & Me.[Start]
    Dim strBdy As String: strBdy = "email body TBC"

    Dim rsRst As DAO.Recordset
    Set rsRst = Me.[courses customer subform].Form.RecordsetClone
    If Not rsRst.BOF And Not rsRst.EOF Then
        rsRst.MoveFirst

        Dim olApp As Object
        Set olApp = CreateObject("Outlook.Application")

        With olApp.CreateItem(0) 'olMailItem
            .BodyFormat = 3 'olFormatRichText
            .to = "info@myemail.co.uk"
            .Subject = strSub
            .HTMLBody = strBdy

            With .Attachments
                Do Until rsRst.EOF
                    If rsRst![Med form] <> vbNullString Then
                        .Add strPth & rsRst![Med form]
                    End If
                    rsRst.MoveNext
                Loop
            End With

            .Display
        End With
    End If
    rsRst.Close
End Sub
Sub-EmailForms()
将strph设置为字符串:strph=“C:\…\Medical forms\”
将strSub设置为字符串:strSub=“Med forms”&Me.[Title]&Me.[Start]
将strBdy设置为字符串:strBdy=“电子邮件正文待定”
将rsRst设置为DAO.Recordset
Set rsRst=Me。[课程客户子表单].Form.RecordsetClone
如果不是rsRst.BOF和rsRst.EOF,则
rsRst.MoveFirst
作为对象的Dim-olApp
设置olApp=CreateObject(“Outlook.Application”)
使用olApp.CreateItem(0)'olMailItem
.BodyFormat=3'olFormatRichText
.to=”info@myemail.co.uk"
.Subject=strSub
.HTMLBody=strBdy
附.附件
直到rsRst.EOF为止
如果是rsRst![Med form]vbNullString然后
.添加strPth和rsRst![医学版]
如果结束
rsRst.MoveNext
环
以
.展示
以
如果结束
rsRst。关闭
端接头

检查
非rs.EOF
可能会失败,如果有人在这之后做了
rs.MoveLast
rs.MoveNext
(那么rs.EOF是真的),那么最好检查
非rs.BOF而非rs.EOF
。非常感谢您的快速响应,我不是这方面的佼佼者,我只为自己的小项目做这件事,所以这是一个巨大的帮助!我还添加了一些额外的内容,比如附加一个课程注册。再次感谢您的帮助。命名对象时请不要使用空格。这将在将来为您节省很多麻烦:)公平地说,我在学习使用access时创建了这个DB,我现在肯定知道,作为将来的参考:D