Вставить текстовый документ в другой текстовый документ без изменения формата VBA - PullRequest
0 голосов
/ 02 февраля 2019

Сначала я копирую текстовый документ doc1 в новый текстовый документ в формате с помощью кнопки на пользовательской форме.Во-вторых, я вставляю в конце этого документа word (заполненный doc1) новый документ word doc2 (doc1 и doc2 получили текст, таблицу и различные цвета).Каждый раз, когда я нажимаю кнопку на другой пользовательской форме, чтобы поставить doc2, я теряю формат doc2.

Вот мой код:

Dim docSource As Document
Dim docTarget As Document
Set docTarget = ActiveDocument
Set docSource = Documents.Open(strFilename)
' Add the content of docSource to docTarget
docTarget.Range.Collapse Direction:=wdCollapseEnd
docTarget.Content.InsertAfter (docSource.Range.FormattedText)
docSource.Close (0)

Я просто не хочу терять формат, приходящийиз другого слова документа (doc2).В Интернете много информации, но я не нашел того, который мог бы помочь.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

FWIW Наиболее простым для вставки одного документа в другой является использование метода InsertFile, так что вставляемый документ даже не нужно открывать.

Проблема с подходом ввопрос в том

docTarget.Content.InsertAfter (docSource.Range.FormattedText)

Необходимо использовать свойство FormattedText с обеих сторон.Также лучше использовать Range объекты, по крайней мере, на «целевой» стороне, поскольку InsertAfter не может работать вместе с FormattedText.(CollapseEnd ничего не делает в коде вопроса, потому что он не применяется к независимому Range объекту.)

Следующее должно работать

Dim rngTarget as Word.Range
Set rngTarget = docTarget.Content
rngTarget.Collapse wdCollapseEnd
rngTarget.FormattedText = docSource.Content.FormattedText

Это будетбыстрее, чем при использовании Selection, и экран не будет "мерцать".Это также оставит буфер обмена пользователя нетронутым.

Единственный раз, когда Selection.Copy - это правильная вещь, когда свойства документа должны встретиться: верхние и нижние колонтитулы, размер страницы и т. Д. FormattedText не будет копироваться свойства уровня раздела , только свойства Range.

0 голосов
/ 02 февраля 2019

Вы должны попробовать использовать специальные функции копирования и вставки:

Попробуйте выполнить следующее:

    Sub PasteWithFormat()

        Dim docSource As Document
        Dim docTarget As Document
        Set docTarget = ActiveDocument
        Set docSource = Documents.Open(strFileName)

        docSource.Select
        Selection.HomeKey Unit:=wdStory
        Selection.EndKey Unit:=wdStory, Extend:=wdExtend
        Selection.Copy
        docTarget.Select
        Selection.EndKey Unit:=wdStory
        Selection.PasteAndFormat (wdPasteDefault)

        docSource.Close

        Set docSource = Nothing
        Set docTarget = Nothing
    End Sub

...