Скопируйте каждую таблицу Word из исходного документа в целевой цикл цикла страница за страницей - PullRequest
0 голосов
/ 29 апреля 2019

Ниже приведен код, который копирует все таблицы из исходного документа Tables.docx в целевой документ в конце документа. Весь приведенный ниже код работает без ошибок.

В целевом документе Temp.doc, У меня есть заголовок таблицы, состоящий из одной или двух строк, затем одна пустая строка и одна текстовая строка, начинающаяся со слова, см. Приложение, как описано ниже, для большей ясности.

Temp.doc


Страница 1 ТАБЛИЦА 1. Резюме ........ (подпись к таблице)

(пустая строка)

См. Приложение 1 (одна текстовая строка)

Оставшаяся пустая страница, где таблица 1 на странице 1 из исходного документа должна быть вставлена ​​или вставлена.


Страница 2 ТАБЛИЦА 1, продолжение Резюме ........ (подпись к таблице)

(пустая строка)

См. Приложение 1 (одна текстовая строка)

Оставшаяся пустая страница, где таблица 2 на странице 2 из исходного документа должна быть вставлена ​​или вставлена.


стр. 3 ТАБЛИЦА 2. Сводка ........ (подпись к таблице)

(пустая строка)

См. Приложение 2 (одна текстовая строка)

Оставшаяся пустая страница, куда нужно вставить или вставить таблицу 3 на странице 3 из исходного документа.

Как скопировать таблицу первой страницы из исходного документа, чтобы вставить ее ниже строки 3 целевого документа на странице 1. Аналогичным образом скопируйте таблицу со страницы 2 исходного документа и вставьте ниже строки 3 страницы 2 целевого документа и т. Д.

У меня мало знаний о макросах. Следовательно, то, что я пытался отредактировать нижеприведенный код, не было включено, чтобы уменьшить путаницу с экспертами.

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 Ответ

3 голосов
/ 30 апреля 2019

Ваше описание в лучшем случае неясно. Я понятия не имею, что вы можете сказать под

В целевом документе 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.

...