【发布时间】:2020-12-22 20:00:23
【问题描述】:
我有一个 Excel 工作表,它打开一个空白 Word 文档作为“主”文档和一个“临时”单独的 Word 文档。我正在尝试移动到“Master”的末尾,复制整个“Temporary”并粘贴到“Master”,然后在“Master”上输入分页符。我在 ".Selection.EndKey unit:=wdStory Extend:=wdMove" 、 ".Add.Content.Paste" 和 ".Selection.InsertBreak Type:=7" 上遇到错误,我不知道为什么。我将迭代多个“临时”文档并将它们一个一个添加到“主”中,但不想移动到循环,直到我可以从“临时”到“主”进行一轮基本的复制粘贴。还有一个 boomark replace 子例程,我没有展示它以降低社区的复杂性,因此“临时”文档上的“Fields.Update”。
Public wb As Excel.Workbook
Public Path As String
Public MasterWordObj
Public MasterCOI
Public TempWordObj
Public TempCOI
Sub COI()
'Initialize Worksheet/Workbook and unprotect worksheet and cells
ActiveSheet.Unprotect
ThisWorkbook.Sheets("COI").Cells.Locked = False
Set wb = ActiveWorkbook
On Error GoTo ErrorHandler
'Path for Master COI Template
Path = "xxx"
'Create a Master Word Session
Set MasterWordObj = CreateObject("Word.Application")
Set MasterCOI = MasterWordObj.Documents.Add
'Define Path for Temporary COI Template
Path = "XXX"
'Create a Temp Word Session
Set TempWordObj = CreateObject("Word.Application")
Set TempCOI = TempWordObj.Documents.Add(Path)
'Activate Temporary Word Template, Update Fields, Copy All
With TempWordObj
.Visible = True
.Selection.WholeStory
.Selection.Fields.Update
.Selection.WholeStory
.ActiveWindow.WindowState = 1
.Activate
.Selection.WholeStory
.Selection.Copy
End With
'Paste and insert Page Break in Master Template
With MasterWordObj
.Visible = True
.ActiveWindow.WindowState = 1
.Selection.EndKey unit:=wdStory, Extend:=wdMove
.Add.Content.Paste
.Selection.InsertBreak Type:=7
.Activate
End With
'Release the Word objects to save memory and exit macro
ErrorExit:
Set MasterWordObj = Nothing
Set TempWordObj = Nothing
Exit Sub
'Error Handling routine
ErrorHandler:
If Err Then
MsgBox "Error No: " & Err.Number & "; There is a problem"
If Not MasterWordObj Is Nothing Then
MasterWordObj.Quit False
End If
If Not TempWordObj Is Nothing Then
TempWordObj.Quit False
End If
Resume ErrorExit
End If
End Sub
【问题讨论】:
-
如果您尚未在 Excel VBA 项目中添加对 Word 的引用,则您的 Excel VBA 将无法使用
wdStory等常量。如果您在模块中使用Option Explicit,则会标记出来(您绝对应该这样做)。您要么需要添加引用,要么在 VBA 中声明缺失的常量及其值。 -
嗨蒂姆。我正在使用对 Word 对象“With MasterWordObj”的引用
-
With 块仅将包含的代码范围限定为您的对象变量。您需要添加对 Word 对象库的引用。见 - datanumen.com/blogs/add-object-library-reference-vba
-
我添加了“Word”参考库。我已经选择了 Excel 参考库。它现在正在工作!谢谢蒂姆。你想在里面写一个答案,以便我为你投票吗?
-
您没有输入任何变量。因此,它们都是默认类型,即
Variant。你应该总是这样声明你的变量:Dim Name As Type