我不想用 VBA 来开发我自己的工具,因为它太脆弱了,无法快速编写代码(并交给其他用户),或者我最终会为了这样一个简单的最终结果而编写太多的代码。
是否有一个很好的内置工具可以填写某种表格并将其填充到 Word 文档中?
如果需要更改数据,您可以转到这个中心位置并在那里进行编辑,而不必尝试找到文档中引用它的所有位置(例如必须进入页眉/页脚,或者知道第一页/最后一页的设置与其余所有页面不同,等等)
这是用于手册的,其内容、作者、名称和标题会随着项目的不同而变化,但格式遵循相同的模板。
答案1
开始表单模板或邮件合并:Word 2016
邮件选项卡 → 开始邮件合并 → 逐步 MM 向导
选择:信函,[下一步]
选择:使用当前文档,[下一步]
选择:键入新列表 → CREATE→ customize columns→ Add/Delete/Rename
保存:Microsoft Office 地址列表 (*.mdb)——这是表单/模板的动态列表。
[下一个]写你的信。现在制作你的模板。
现在插入动态“字段”:
-
邮件选项卡 → [插入合并字段] 在新页面从一个项目切换到另一个项目的任何位置插入“字段”。
它看起来是这样的:图像(点击图片到观看/导航动画动态图片)
Microsoft 支持 - Word(邮件合并):关联
Microsoft 支持 - 使用 Excel 进行邮件合并:关联
答案2
虽然这不是我最干净的代码,但是它完成了工作。
解决方案
这会将文本文件中的一系列键值对加载到 Word 文档的活动文档.变量列表。这些变量持久地存储在文档中,但我选择将它们分开,以避免变量重复和孤立(参见代码中的大锤删除)。
以下代码没有错误处理,但会进行一些基本的解析检查以避免崩溃。不过尚未进行广泛测试,因此请自行进行尽职调查。
用法:
将代码放置在 Document On Open 事件处理程序中。它将创建一个与 Word 文档同名但扩展名为“.config”的文件。
在创建时,配置文件将写入所有当前的 ActiveDocument.Variables,以确保如果您复制 Doc 并忘记或不知道 .config 文件,您不会意外打开空白文件。
如果配置文件存在,则所有文档变量都会从内存中删除,而配置中的变量会加载到内存中。您可以更改配置文件中变量的值,下次打开文档时,该值会在整个文档中更新。
Option Explicit
Private Sub Document_Open()
'Dim
Dim i As Long
Dim Folder As String
Dim FileName As String
Dim FullPath As String
Dim FileText As String
Dim Item As Variant
Dim Table As Scripting.Dictionary
Dim Key As Variant
' Open or Create Config File
With New FileSystemObject
' Setup Path
Folder = ThisDocument.Path & "\"
FileName = .GetBaseName(ThisDocument.Name)
FullPath = Folder & FileName & ".config"
If (.FileExists(FullPath)) Then
' Sledge Hammer Cleanup of Document Vars, avoids memory bloat by synchronizing variables with .config file
For i = ActiveDocument.Variables.Count() To 1 Step -1
ActiveDocument.Variables.Item(i).Delete
Next i
' Open / Read
With .OpenTextFile(FullPath, ForReading, False)
' Get File Contents
If Not (.AtEndOfStream) Then
FileText = .ReadAll
End If
.Close
End With
Else
' Create / Write
With .OpenTextFile(FullPath, ForWriting, True)
' Write One Key-Value pair per line
For Each Item In ActiveDocument.Variables
.WriteLine (Item.Name & ":=" & Item.Value)
Next
.Close
End With
End If
End With
' Parse Config Text for Runtime
Set Table = ParseVariables(FileText)
For Each Key In Table.Keys
ActiveDocument.Variables(Key) = Table(Key)
Next
' Update All Fields in Document
ActiveDocument.Fields.Update
' Save File so user does not get nuisance prompts
ActiveDocument.Save
End Sub
Private Function ParseVariables(text As String) As Scripting.Dictionary
' Dim
Dim i, n As Long
Dim Lines As Variant: Lines = Split(text, vbCrLf)
Dim VarTable As New Scripting.Dictionary
Dim Key, Value As String
' Loop
For i = LBound(Lines) To UBound(Lines)
Debug.Print ("Lines(" & i & ") = " & Lines(i))
' Find the ":=" delimiter in each line that splits the variable name from its value
n = InStr(1, Lines(i), ":=", vbBinaryCompare)
' Escape if not delimited
If (n > 0) Then
' Extract Key before ":=" and Value from after ":="
Value = Mid(Lines(i), n + 2)
Key = Trim(Mid(Lines(i), 1, Len(Lines(i)) - Len(Value) - 2))
' Escape if either Key or Value are empty
If (Len(Key) > 0) And (Len(Value) > 0) Then
VarTable.Item(Key) = Value
End If
End If
Next i
' Return
Set ParseVariables = VarTable
End Function