【问题标题】:VBA Copying from one Word Doc to Another from ExcelVBA 从一个 Word Doc 复制到另一个 Excel
【发布时间】: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

标签: excel vba ms-word


【解决方案1】:

如果您尚未在 Excel VBA 项目中添加对 Word 的引用,则您的 Excel VBA 将无法使用 wdStory 等常量。如果你在你的模块中使用 Option Explicit,就会被标记出来(你绝对应该这样做)。

您要么需要添加引用,要么在 VBA 中声明缺失的常量及其值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多