2014-08-29 3 views
1

Кто-нибудь понял, как я могу передавать текст из одного документа в другой без использования буфера обмена, но сохраняя все форматирование в тексте (например, жирным шрифтом и курсивом)?Word VBA Использование альтернативы буферу

Вот как я это делаю в данный момент (между этими строками есть много кода, которые открывают документы в каталоге для меня, но сейчас я их опускаю, поэтому могу дойти до точки):

Dim rng1, rng2, rngFound as Range 
Dim FSO as Scripting.FileSystemObject 

For Each File1 in FSO.GetFolder(Directory).Files 

'...Open first Document and get cursor to Point A to mark the start of the text 
Documents.Open(File1.Path) 
Set rng1 = Selection.Range 

'...Move cursor to point B to mark the end of the text 
Set rng2 = Selection.Range 

'...Combine the 2 points and capture everything in between into Clipboard 
Set rngFound = (rng1.Start, rng2.Start) 
rngFound.Copy 

ActiveDocument.Close 

'...Open up second Document and paste it in 
Documents.Open(File2.Path) 
Selection.PasteAndFormat (wdFormatSurroundingFormattingWithEmphasis) 

ActiveDocument.Save 
ActiveDocument.Close 

Next 

Проблема с делать это таким образом, что я не могу использовать буфер обмена в то время как это работает (это петли в каталоге сотен документов, так занимает некоторое время).

Я хотел бы найти способ сделать это без буфера обмена, но таким образом, что сохраняет форматирование из одного дока к другим (Важно). #

Надежды, что имеет смысл, спасибо advance :)

+0

Посмотрите на элемент форматированного текста объекта Range. – 2014-09-02 06:00:50

ответ

2

Вот решение с использованием временного файла и InsertFile.

Замените Pgr на пути, чтобы получить папку, которая фактически существует на вашем компьютере.

Это просто доказательство концепции. Он открывает "C:\Users\Pgr\AppData\Local\Temp\doc1.docx" в качестве исходного документа, получает только второй абзац, сохраняет его как временный файл и затем возвращается к целевому документу (с которого выполняется этот макрос) и использует InsertFile для размещения там контента.

Sub CopyThroughTempFile() 

    Set targetdoc = ActiveDocument 
    Set sourceDoc = Documents.Open("C:\Users\Pgr\AppData\Local\Temp\doc1.docx") 
    Set rng2copy = sourceDoc.Paragraphs(2) 

    rng2copy.Range.Copy 
    sourceDoc.Range.Paste 'pastes replacing everything in the file 
    sourceDoc.SaveAs ("C:\Users\Pgr\AppData\Local\Temp\temp.docx") 


    targetdoc.Activate 
    Selection.InsertFile ("C:\Users\Pgr\AppData\Local\Temp\temp.docx") 

End Sub 

Надеюсь, это поможет (вам или кому-то ...).