Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

2024-05-20

我们正在尝试从 Access 中自动执行邮件合并过程 - 单击按钮后,VBA 将运行指定当前数据库(accdb)作为数据源并运行 SQL,具体代码如下:

'Set up Word
Dim objWord As Object
Set objWord = CreateObject("Word.Application")

'Make visible, open specified doc to merge
With objWord
    .Visible = True
    .Documents.Open strDocName
End With

'Set the data source path
Dim docPath As String
docPath = CurrentProject.Path & "\" & CurrentProject.Name

'Open the merge data source - simplified
objWord.activedocument.mailmerge.opendatasource _
    Name:=docPath, _
    SQLStatement:=strSQL

strDocName 和 strSQL 被传入并包含有效的功能内容。

它成功打开了Word,使其可见并打开了要合并到的模板。然而,此时,它会要求确认数据源,并显示可能的数据源列表。单击“显示全部”复选框后,我可以通过 ODBC(.mdb、.accdb)向下滚动到 MS Access 数据库,然后从列表中选择它。

然后,它会显示一个标题为“ODBC Microsoft Access 驱动程序登录失败”的框,显示“无法找到文件:“[数据库文件夹的路径]/[包含文件夹的名称].mdb””

因此,如果我的数据库位于 C:\Temp 中,错误路径将显示为“C:\Temp.mdb”。将 Access 数据库移动到另一个文件夹会导致错误路径更新,以根据包含的文件夹查找相应命名的 mdb 文件。

我不知道它是否相关,但它似乎也在编辑模板本身的模式下打开模板,而不是从该模板生成新文档。

我在这里遗漏了一些东西还是有人有任何想法?

Cheers


在下面 Remou 的帮助下,我们放弃了直接链接到 Access,并使用 Remou 建议链接中的代码输出到临时文本文件,然后从那里合并。

我们修改了代码以删除 CurrentBackendPath() 并更改对此函数的唯一引用,如下所示:

Private Function GetStartDirectory() As String
    'GetStartDirectory = CurrentBackendPath() & "mm\"
    GetStartDirectory = CurrentProject.Path & "\mm\"
End Function

我们使用的唯一其他修改是将代码更改为特定于我们的目的。再次感谢大家的回复。如果我有足够的声誉的话,我会为 Remou 的回应投票!


我强烈建议你not链接到 MS Access 文件。将所需的数据输出到文本文件并链接到该文件。对于手动控制的邮件合并来说,链接到 Access 非常好,但当您希望实现自动化时,它就变得极其乏味。您可能想阅读http://www.tek-tips.com/faqs.cfm?fid=5088 http://www.tek-tips.com/faqs.cfm?fid=5088

话虽如此,录制宏时,我得到以下信息:

ActiveDocument.MailMerge.OpenDataSource Name:="Z:\Docs\Test.accdb", _
    ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    Format:=wdOpenFormatAuto, Connection:= _
    "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=Z:\Docs\Test.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk" _
    , SQLStatement:="SELECT * FROM `Table1`", SQLStatement1:="", SubType:= _
    wdMergeSubTypeAccess

上面的大部分内容都是不必要的,但您会看到它包含一个连接字符串。早期版本中并非如此。您可以通过以下方式度过:

With objWord.ActiveDocument.MailMerge
    .OpenDataSource Name:="Z:\Docs\Test.accdb", _
        ConfirmConversions:=False, LinkToSource:=True, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Docs\Test.accdb;" _
        , SQLStatement:="SELECT * FROM `Table1`"
End With
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源 的相关文章

  • 如何从示例中给出的某些输入自动生成某些 Excel 字符串?

    基本上我想要在Excel中执行以下操作 如果我在表 1 中输入以下内容 我需要它 A B C 1 Name Size Color 2 Shirt S M L Red Green 3 Trouser 32 34 White Black Gre
  • VBA getelementsbytagname问题

    早上好 我正在尝试提取 HTML 表信息并在 Excel 电子表格上整理结果 我正在使用getelementsbytagname table 0 函数来提取 HTML 表格信息 效果很好 有人可以告诉我这有什么意义吗 0 桌子之后 另外 我
  • 变量的变化触发事件

    是否可以通过变量的更改来触发事件 例如 这将触发事件 Dim t As Integer Dim Fire As Boolean Private Sub Test t 0 Fire True IIf Fire t 1 t 2 End sub
  • 操作必须使用可更新的查询 - 访问

    我想通过使用 access 2007 中的联接来更新表 UPDATE TABLE1 A INNER JOIN SELECT ACCODE SUM AMOUNT AS SUM AMOUNT FROM TABLE2 GROUP BY ACCOD
  • 在 Access 表单上将控件分组在一起

    我有一个 Access2003 表单 我想将多个控件组合在一起并通过 VBA 代码以编程方式更改可见性 这可能吗 我确实知道我可以通过 格式 gt 组 对项目进行分组 但如果这样做 如何在代码中引用整个组 谢谢 您可以将所有控件放置在组框控
  • VBA 中 Thisworkbook.name 和 Activeworkbook.name 之间的区别

    Thisworkbook 和 ActiveWorkbook 有什么区别吗 示例代码 Sub workbook name MsgBox Thisworkbook name End Sub Sub active name MsgBox Acti
  • 如何使用 xlwings 从 Python 调用 Excel 宏?

    我读过API docs http docs xlwings org api html对于 xlwings 并在解释器中使用 Workbook 和 Sheet 对象 但我不知道如何从 Python 调用宏 如何使用 xlwings 从 Pyt
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • Excel VBA 中.Delete 和.Clear 的区别?

    有什么区别Worksheets 1 Cells Delete and Worksheets 1 Cells Clear 我问这个是因为我一直用 Clear清除我的工作表内容 但在我之前的帖子中我发现Worksheets 1 Cells De
  • 延迟宏以允许事件完成

    在尝试从宏内访问外部 API 函数集时 我发现有必要添加延迟 以便外部 API 有时间处理选择 实现这一点会带来一些困难 因为使用 Application Wait 或 Application Sleep 不起作用 在线搜索让我尝试使用 G
  • 使用 Excel-VBA(MSXML2.XMLHTTP 对象)更新 SharePoint 列表

    基本信息 我需要从 Excel 更新 添加 编辑 SharePoint 列表 我能够做到这一点ListObject 但这不是我们要走向的方向 在阅读了所有谷歌可能性后 我想出了 也许我错了 使用的想法MSXML2 XMLHTTP对象来更新
  • 从磁盘加载多维 VBA 数组

    我正在尝试保存多维 VBA 数组 然后将其加载到磁盘或从磁盘加载 根据MSDN 网站 http msdn microsoft com en us library office gg278468 28v office 14 29 aspx 维
  • 用户窗体上的类对象 TextBox 可用方法

    我注意到 当我为文本框创建类模块并在表单上使用它时 通过在表单 init 事件中通过 VBA 添加 Enter 或 Exit 方法都不可用 当然 如果我只是在表单中添加一个文本框 我可以让 DblClick 方法正常工作 因此我的类设置正确
  • 通过单击按钮将 Access 中的数据获取到 C# 中的文本框中

    我在 MS Access 中有一个表 其中包含 FoodID FoodName Price 在 C 中 我有三个文本框 txtId txtName txtPrice 和一个按钮 btnSearch 我的问题是 在 C 中 我只需在 txtI
  • 导出到 Excel 时如何避免“数字存储为文本”

    当我将表格从 Access 导出到 Excel 时 所有数字都显示为文本 并且单元格上有绿色箭头 有没有办法自动修复此错误 或者有另一种导出方法可以解决该错误 作为参考 这是我导出的方式 DoCmd TransferSpreadsheet
  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 如何找到特定程序的安装目录?

    我已经成功地编写了一些用于工作的 VBA 宏 这些宏基本上创建了一个数据文件 将其提供给一个程序并对该程序的输出进行后处理 我的问题是程序安装路径是硬编码在宏中的 并且安装在我同事的计算机上可能会有所不同 我首先想到的是 我可以从每个人那里

随机推荐