MS Access用户表单点击按钮获取子窗体查询数据发邮件VBA报错如何解决
Access表单自动发邮件VBA代码修复方案
存在的问题
- 带空格的字段名未使用VBA要求的方括号
[]包裹,First name、Student First name这类写法直接触发语法错误 - 未明确指定字段所属的表单对象,容易被识别为未定义变量
Password末尾多了无意义的**字符,打断字符串拼接逻辑- 字段值与后续文本拼接时缺少空格,生成的邮件内容会出现文字粘连的问题
- 采用Outlook早绑定实现,未提前配置Outlook对象库引用时会直接报错,兼容性差
- 字符串拼接时多余的重复逗号,会导致邮件内容出现不必要的标点
修复后代码(兼容所有环境的晚绑定版本)
Private Sub cmd_EmailContact_Click() ' 强制变量声明,可放在模块最顶部 ' Option Explicit Dim Msg As String ' 拼接邮件内容,带空格的字段名用[]包裹,加Me.明确指向当前表单 Msg = "Dear " & Me![First name] & ",<p>" & _ Me![Student First name] & " has been successfully loaded on the platform.<p>" & _ "Student login details on the platform are:<p>" & _ "Username: " & Me![Username] & "<p>" & _ "Password: " & Me![Password] ' 晚绑定Outlook对象,无需提前引用库 Dim O As Object Dim M As Object Const olMailItem = 0 Const olFormatHTML = 2 Set O = CreateObject("Outlook.Application") Set M = O.CreateItem(olMailItem) With M .BodyFormat = olFormatHTML .HTMLBody = Msg .To = Me![Email] .Subject = "Student available on OARS" ' 需要直接发送改.Display为.Send .Display End With ' 释放对象 Set M = Nothing Set O = Nothing End Sub
使用注意事项
- 如果需要使用早绑定方式,可进入VBA编辑器→「工具」→「引用」,勾选对应版本的
Microsoft Outlook xx.x Object Library即可 - 运行前请确保当前表单的记录源已正确关联包含所需字段的查询,表单当前行存在有效数据
- 若子窗体数据需要遍历多条记录发送,可新增循环逻辑逐行读取子窗体的记录集生成邮件
内容的提问来源于stack exchange,提问作者Drew
相关产品推荐
相关产品推荐

