使用 vba 使用从 Excel sheet 导入的数据自动化 Microsoft Word 文档,使用变量过滤实际插入的数据

Using vba to automate a Microsoft Word document with data imported from an Excel sheet, using a variable to filter what data to actually insert

我正在尝试使用 Excel 中的信息填充 Word 文档。 excel 上的 table 看起来很简单。

  QUESTION              |YES|  DATA

 Prewritten question 1  | X | Prewritten data 1

 Prewritten question 2  | X | Prewritten data 2

 Prewritten question 3  | X | Prewritten data 3

然后我将如何使用 YES 下带有变量 X 的数据自动填充新的 word 文档,只粘贴数据列中保存的预写数据?

我几乎只使用分步邮件合并功能就可以在 Word 上完成这项工作,但是当我能够填充 Word 文档时,预写数据会粘贴,但数据列中的每个粘贴选择都会占用它自己在 Word 上的页面,即使它是一个短短的 3 个词短语。

最简单的方法是不使用代码,使用 Word 字段。

  1. 在Excel、select数据范围内并为其指定一个名称(Range name)
  2. 在 Word 中 Insert/Text/Quick Parts/Field
  3. 从列表中选择数据库。将出现一个插入数据库按钮,单击该按钮。
  4. 在对话框中,第 1 步,导航到工作簿的位置并 select 它。系统将提示您输入连接协议(OLEDB 可以)。 Select 列表中的范围名称。
  5. 在第 2 步中选择 "Query Options"。选项卡 "Select Fields":在右侧的列表中,select 您不需要的字段,然后单击 "Remove"。 Tab "Filter Records":选择 "Yes" 列并设置 Comparison "Equal to" 并在第三个框中键入 X。
  6. 在第3步点击"Insert Data";请务必激活 "Insert Data as Field" 复选框以将活动的 link 返回到工作簿。

这将在 Word 文档中插入一个数据库字段,其语法类似于以下内容。按 Alt+F9 在字段结果和字段显示视图之间切换。如果您做过任何数据连接方面的工作,其中一些对您来说会很熟悉。在任何情况下,您都应该识别开头附近的文件路径和末尾的 SQL select 语句。

{ DATABASE  \d "C:\Test\ExcelDataRange.xlsx" 
  \c "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;
  Data Source=C:\Test\ExcelDataRange.xlsx;Mode=Read;
  Extended Properties=\"HDR=YES;IMEX=1;\";
  Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";
  Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;
  Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;
  Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;
  Jet OLEDB:Encrypt Database=False;
  Jet OLEDB:Don't Copy Locale on Compact=False;
  Jet OLEDB:Compact Without Replica Repair=False;
  Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;
  Jet OLEDB:Bypass UserInfo Validation=False" 
  \s "SELECT `Data` FROM `Test` WHERE ((`Yes` = 'X'))" }

如果工作簿中的数据发生变化,请单击 table 并按 F9 更新字段。 (如果您向范围中添加行,请务必调整范围名称以包含所有行!)