使用 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 字段。
- 在Excel、select数据范围内并为其指定一个名称(Range name)
- 在 Word 中 Insert/Text/Quick Parts/Field
- 从列表中选择数据库。将出现一个插入数据库按钮,单击该按钮。
- 在对话框中,第 1 步,导航到工作簿的位置并 select 它。系统将提示您输入连接协议(OLEDB 可以)。 Select 列表中的范围名称。
- 在第 2 步中选择 "Query Options"。选项卡 "Select Fields":在右侧的列表中,select 您不需要的字段,然后单击 "Remove"。 Tab "Filter Records":选择 "Yes" 列并设置 Comparison "Equal to" 并在第三个框中键入 X。
- 在第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 更新字段。 (如果您向范围中添加行,请务必调整范围名称以包含所有行!)
我正在尝试使用 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 字段。
- 在Excel、select数据范围内并为其指定一个名称(Range name)
- 在 Word 中 Insert/Text/Quick Parts/Field
- 从列表中选择数据库。将出现一个插入数据库按钮,单击该按钮。
- 在对话框中,第 1 步,导航到工作簿的位置并 select 它。系统将提示您输入连接协议(OLEDB 可以)。 Select 列表中的范围名称。
- 在第 2 步中选择 "Query Options"。选项卡 "Select Fields":在右侧的列表中,select 您不需要的字段,然后单击 "Remove"。 Tab "Filter Records":选择 "Yes" 列并设置 Comparison "Equal to" 并在第三个框中键入 X。
- 在第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 更新字段。 (如果您向范围中添加行,请务必调整范围名称以包含所有行!)