我创建了一个客户端数据库。在数据库中,每个客户端都按唯一的公司ID进行分组。用户可以通过在主窗体上的以下单元格中输入公司ID来搜索公司中的所有客户端。
([Forms]![frmNavigationForm]![Text78])
现在我想通过点击主表单上的按钮,从子表单到单词的邮件合并。
我从以下链接中获得了一些想法:Access and Word 2010 merging one record depending on subform button clicked
问题: 当我尝试运行代码时,它显示运行时错误" 4198":命令失败。
当我运行debug时,此命令突出显示
.OpenDataSource Name:=sData, SQLStatement:=strSQL
有人可以告诉我如何修复错误吗?
Private Sub Command203_Click()
Dim mDoc As String
Dim strSQL As String
mDoc = "C:\~~~\800052 ENG w Macro titus.docx"
strSQL = "SELECT * FROM![frmNavigationForm]![frmKYCGenerator] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78]
Dim oApp As New Word.Application
Dim oMainDoc As Word.Document
Dim sData As String
oApp.Visible = True
Data = "C:\~~~\Database - Users - PR.accdb"
Set oMainDoc = oApp.Documents.Open(mDoc)
With oMainDoc.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource Name:=sData, SQLStatement:=strSQL
End With
With oMainDoc
.MailMerge.Destination = wdSendToNewDocument
.MailMerge.Execute
End With
oApp.Activate
oApp.Documents.Parent.Visible = True
oApp.Application.WindowState = 1
oApp.ActiveWindow.WindowState = 1
Set oApp = Nothing
Set oMainDoc = Nothing
Exit Sub
Err_Handle:
Set oApp = Nothing
Set oMainDoc = Nothing
MsgBox "An error occurred..." & vbCrLf & vbCrLf & Err.Description
End Sub
答案 0 :(得分:0)
您的数据源名称可能为空。我认为:
Data = "C:\~~~\Database - Users - PR.accdb"
应该是:
sData = "C:\~~~\Database - Users - PR.accdb"
答案 1 :(得分:0)
在模块代码的顶部添加Option Explicit
。
这会发现@peter和任何其他未声明或拼写错误变量
确定的问题看起来你在SQL中合并了几个名字
我假设你知道你在SQL语句中做了什么 - 你忘了表名 - 或者你实际上使用[frmNavigationForm]![frmKYCGenerator]
因为你没有提到任何表名,我会假设后者。在那种情况下......
更改此
strSQL = "SELECT * FROM![frmNavigationForm]![frmKYCGenerator] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78]
到此
strSQL = "SELECT * FROM [" & [Forms]![frmNavigationForm]![frmKYCGenerator] & "] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78]