将每个Word表从源文档逐页复制到目标文档循环

时间:2019-04-29 10:21:40

标签: vba ms-word word-vba

我有下面的代码,该代码将所有表从源文档Tables.docx复制到目标文档的末尾。以下所有代码均可正常运行。

在目标文档Temp.doc,中,我有一行或两行的表标题,然后一行空白和一行以单词开头的文本行请参见附录,如下所述,以更加清楚。

Temp.doc


第1页 表1. .......的摘要(表标题)

(一行空白)

请参阅附录1(一行文字)

剩余页为空白,其中粘贴或插入了源文档中第1页的表1。


第2页 表1续........(表格标题)的摘要

(一行空白)

请参阅附录1(一行文字)

其余页面为空白,其中粘贴或插入了源文档中第2页的表2。


第3页 表2. .......的摘要(表标题)

(一行空白)

请参阅附录2(一行文本)

剩余页为空白,其中粘贴或插入了源文档第3页的表3。

如何从源文档复制首页表以粘贴到页面1的目标文档第3行下方。类似地,从源文档的第2页复制表并粘贴到目标文档的第2页第3行下方,依此类推。 / p>

我对宏不是很了解。因此,我尝试编辑以下代码的内容并未包括在内,以减少对专家的困惑。

Sub ExtractTables()

    Dim objTable As Table
    Dim SourceDoc As Document
    Dim TargetDoc As Document
    Dim objRange As Range



    Set SourceDoc = WrdApp.Documents.Open(ActiveDocument.Path & "\Tables.docx")
    Set TargetDoc = WrdApp.Documents.Open(ActiveDocument.Path & "\Temp.doc")

    For Each objTable In SourceDoc.Tables
        objTable.Range.Select
        Selection.Copy

        Set objRange = TargetDoc.Range
        objRange.Collapse Direction:=wdCollapseEnd
        objRange.PasteSpecial DataType:=wdPasteRTF
        objRange.Collapse Direction:=wdCollapseEnd
        objRange.Text = vbCr            
    Next objTable     
End Sub

1 个答案:

答案 0 :(得分:3)

您的描述充其量是晦涩的。我不知道你可能是什么意思

  

在目标文档Temp.doc中,我具有一到两个表格标题   一行,然后一行空白,从单词参考开始的一行文本   附录

也就是说,如果要在Temp.doc中插入书签以指示这些复制表的去向,则可以使用以下代码:

Sub CopyTables()
Dim DocSrc As Document, DocTgt As Document, T As Long

Set DocSrc = WrdApp.Documents.Open(ActiveDocument.Path & "\Tables.docx")
Set DocTgt = WrdApp.Documents.Open(ActiveDocument.Path & "\Temp.doc")

With DocSrc
  For T = 1 To .Tables.Count
    If DocTgt.Bookmarks.Exists("Tbl" & T) Then
      DocTgt.Bookmarks("Tbl" & T).Range.FormattedText = .Tables(T).Range.FormattedText
    End If
  Next
End With
End Sub

以上代码假定Temp.doc中的书签分别命名为Tbl1,Tbl2等。

您为什么拥有类似这样的代码也不清楚:

Dim WrdApp As Word.Application
Dim bWeStartedWord As Boolean
…

On Error Resume Next
Set WrdApp = GetObject(, "Word.Application")
On Error GoTo 0

If WrdApp Is Nothing Then
    Set WrdApp = CreateObject("Word.Application")
    bWeStartedWord = True
End If

WrdApp.Visible = True     

因为除了Word之外,没有任何其他应用程序可以表示。