Скопировать содержимое всего листа в уже открытый документ Word

У меня есть два частичных рабочих бита кода для объединения.

У меня есть рабочий лист с надписью «word», который я хочу экспортировать и автоматически сохранять под переменной.

Sub CreateNewWordDoc() Dim wrdApp As Word.Application Dim wrdDoc As Word.Document Dim i As Integer docname = Worksheets("input").Range("b10").Value Data1 = Worksheets("word").Range("a1:d103").Value Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Open("C:\Results\ResultsTemplate.doc") '******THIS IS TO EDIT THE WORD DOCUMENT****** With Worksheets("word") CopyRangeToWord wdDoc, .Range("A1:d104") '******THIS IS THE END TO EDIT THE WORD DOCUMENT***** If Dir("C:\Results\" & docname & ".doc") <> "" Then Kill "C:\Results\" & docname & ".doc" End If .SaveAs ("C:\Results\" & docname & ".doc") .Close ' close the document End With wrdApp.Quit ' close the Word application Set wrdDoc = Nothing Set wrdApp = Nothing End Sub 

Мне нравится этот первый лучший. Он откроет мой шаблон, в котором есть все официальные материалы, которые потребуются для этих генерируемых отчетов (информация о компании и т. Д.), И автоматически сохранит и закроет правильное имя файла. Однако я не могу найти способ заставить его скопировать всю информацию из слова «лист» в текстовое тело документа. Он сохраняет пустой документ.

Несмотря на устранение неполадок, я столкнулся с этим кодом:

 Private Sub CopyRangeToWord(ByRef wdDoc As Word.Document, rng_to_copy As Range, Optional page_break As Boolean = True) ' Will copy the range given into the word document given. Application.StatusBar = "Copying data from " & rng_to_copy.Parent.Name & "..." rng_to_copy.Copy wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste Application.CutCopyMode = False wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter ' insert page break after all worksheets except the last one If page_break Then With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range .InsertParagraphBefore .Collapse Direction:=wdCollapseEnd .InsertBreak Type:=wdPageBreak End With End If End Sub Sub CopyWorksheetsToWord() Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet Application.ScreenUpdating = False Application.StatusBar = "Creating new document..." Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Add docname = Worksheets("input").Range("b10").Value With Worksheets("word") CopyRangeToWord wdDoc, .Range("A1:d104") End With Set ws = Nothing Application.StatusBar = "Cleaning up..." 'apply normal view With wdApp.ActiveWindow If .View.SplitSpecial = wdPaneNone Then .ActivePane.View.Type = wdNormalView Else .View.Type = wdNormalView End If End With Set wdDoc = Nothing wdApp.Visible = True Set wdApp = Nothing Application.StatusBar = False End Sub 

который делает прямо противоположный первому коду: он откроет новый документ (а не шаблон), полностью скопирует все данные, но не сохранит или не вернет правильные имена файлов.

Я предполагаю, что будет проще обновить раздел кода один, чтобы скопировать содержимое рабочего листа, и это то, что я бы предпочел.

 Private Sub CopyRangeToWord(ByRef wdDoc As Word.Document, rng_to_copy As Range, Optional page_break As Boolean = True) ' Will copy the range given into the word document given. Application.StatusBar = "Copying data from " & rng_to_copy.Parent.Name & "..." rng_to_copy.Copy wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste Application.CutCopyMode = False wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter ' insert page break after all worksheets except the last one If page_break Then With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range .InsertParagraphBefore .Collapse Direction:=wdCollapseEnd .InsertBreak Type:=wdPageBreak End With End If End Sub Sub CopyWorksheetsToWord() Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet Application.ScreenUpdating = False Application.StatusBar = "Creating new document..." Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Add docname = Worksheets("input").Range("b10").Value With Worksheets("word") CopyRangeToWord wdDoc, .Range("A1:d104") With wdDoc .SaveAs ("C:\Results\" & docname & ".doc") .Close End With End With End Sub 

это работает: но не открывается из моего шаблона. тем не менее – он создаст документ с одного листа и автоматически сохранит его в каталоге с именем файла, на которое ссылается определенная ячейка.

Interesting Posts

Сохранить таблицу Excel как Jpeg на C ++?

Удалить уникальную строку из csv

Сравнение массивов в php и присвоение значений от одного к другому значениями из определенных ключей

Почему этот формат « h: mm: ss \ AM / PM» 24-часовой формат в Excel?

Могу ли я создавать опорные точки с помощью perl?

Сравнение индексов с использованием нескольких критериев

Excel Как заменить одну часть формулы во всех ячейках в столбце

Установите общий переключатель и макрос окна, чтобы отобразить следующие три строки, когда выбран один флажок

VBA autofit от строки x дальше?

excel time serial вернуться к тексту

Формула Excel обрабатывает числа в одной и той же ячейке по-разному

Неспособность IMessageFilter обрабатывать 0x800AC472 (VBA_E_IGNORE) делает реализацию IMessageFilter нерелевантной?

Есть ли способ получить сохраненное значение усеченного номера в Excel

Старый текст в одном цвете, новый текст другого цвета. Excel VBA

VBA: изменение формата текста, скопированного в текстовое поле ActiveX

Давайте будем гением компьютера.