2016-06-23 7 views
0

В EXCEL я объединим несколько документов с использованием VBA. Моя работа потока:Слияние текстовых документов в VBA EXCEL (выпуск: обратный порядок)

  1. Открыть шаблон и удалить все существующий текст (только сохранить format_
  2. начать цикл путем копирования каждого слова документ комбинироваться (я скопировать из строки 13 каждого файла)
  3. вставить в объединенный файл

до сих пор большинство шагов хороши кроме того, что слитый файл в порядке отворотов, что означает, что последняя страница объединенного документа фактически является первым открыл документ. есть способ вставить текст в обычном порядке? Спасибо!

Set newDoc = objWord.Documents.Open(path to template) 
'clear template text in this template 
objWord.Selection.WholeStory 
objWord.Selection.Delete 

For i = 1 To NoOfFiles 
     Set objDoc = objWord.Documents.Open(Folderpath to output files) 
     ' goto line 13 
     Set r = objDoc.Goto(what:=3, which:=wdGoToNext, Count:=13) 
     r.End = objDoc.Range.End 
     r.Copy 
     newDoc.Content.InsertBreak Type:=wdSectionBreakNextPage 
     newDoc.Range(newDoc.Content.Start, newDoc.Content.Start).Paste 

    End If 
Next 
+0

Ваш диапазон, в который вы вставляете, является началом документа (newDoc.Content.Start). Возможно, попробуйте newDoc.Content.End? – leowyn

+0

@leowyn, я попробовал 'newDoc.Range (newDoc.Content.End, newDoc.Content.Start) .Paste', но получил ошибку« значение вне диапазона » –

+0

два параметра, переданные в Range, являются начальными и конечными положениями курсора. Если вы используете 'newDoc.Range (newDoc.Content.End, newDoc.Content.Start) .Paste', тогда вы пытаетесь создать диапазон, который возвращается назад от конца документа к началу его. Попробуйте 'newDoc.Range (newDoc.Content.End, newDoc.Content.End) .Paste' – leowyn

ответ

0

Этот скрипт объединит все файлы Word в один.

Sub MergeAllWordDocs1() 
    Dim i As Long 
    Dim MyName As String, MyPath As String 
    Application.ScreenUpdating = False 
    Documents.Add 
    MyPath = "C:\Users\your_path_here\" ' <= change this as necessary 
    MyName = Dir$(MyPath & "*.do*") ' not *.* if you just want doc files 
    Do While MyName <> "" 
     If InStr(MyName, "~") = 0 Then 
      Selection.InsertFile _ 
    FileName:="""" & MyPath & MyName & """", 
      ConfirmConversions:=False, Link:=False, 
      Attachment:=False 
    Selection.InsertBreak Type:=wdPageBreak 
    End If 
     MyName = Dir() ' gets the next doc file in the directory 
    Loop 
End Sub 
Смежные вопросы