在VBA中组合单词对象

时间:2017-02-27 08:25:04

标签: vba object ms-word word-vba

我在VBA中创建了三个Word对象,它们是; A,B和C.

我想将这些组合成一个名为D的单个Word对象。

我试图通过文档合并来实现这一点,但无济于事。

我的来源如下:

Set p_appWord = p_appWordContent.Merge(p_appWordGeneral)

p_appWord是主要对象,(p_appWordContent + p_appWordGeneral)是子对象。

1 个答案:

答案 0 :(得分:0)

这是一个实现你想要的三个文件的例子,合并为一个新文件:

Dim a As String, b As String, c As String, d As Document
Dim r As Range

a = "path to first doc"
b = "path to second doc"
c = "path to third doc"
Set d = Documents.Add

Set r = d.Content
r.InsertFile a, Link:=False
Set r = d.Range(d.Content.End - 1, d.Content.End - 1)
r.InsertFile b, Link:=False
Set r = d.Range(d.Content.End - 1, d.Content.End - 1)
r.InsertFile c, Link:=False

如果您希望对可变数量的文件执行此操作,则需要循环它们。下面是一个示例,请设置对Microsoft Scripting Runtime的引用:

Dim d As Document
Dim r As Range
Dim fso As FileSystemObject, fol As Folder, f As File
Dim fc

Set fso = New FileSystemObject
Set fol = fso.GetFolder("path to your files")

Set d = Documents.Add

For Each f In fol.Files
    Set r = d.Range(d.Content.End - 1, d.Content.End - 1)
    r.InsertFile f.Path, Link:=False
Next f

修改 如果您希望将所有当前打开的文档合并为一个而不迭代文件,请使用:

Dim d As Document
Dim r As Range
Dim allDocs As Variant

ReDim allDocs(Documents.Count)

For i = 1 To Documents.Count
    allDocs(i - 1) = Documents(i).Name
Next i

Set d = Documents.Add

For i = 0 To UBound(allDocs) - 1
    Documents(allDocs(i)).Range.Copy
    Set r = d.Range(d.Content.End - 1, d.Content.End - 1)
    r.Paste
Next i