Excel VBA Макросы: Макросом скопировать только таблицу из Эксель в Ворд вставив во вторую строку, не удаляя остальной текст в документе.

Автор Mayskij, 21 января 2020, 17:50

Mayskij

Нужно Макросом скопировать только таблицу из Эксель в Ворд, вставив во вторую строку, не удаляя остальной текст в документе.

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

Вот сделал так, что вставляется в первый абзац (по умолчанию видимо) и удаляется содержимое открываемого документа.

Макрос
Sub Макрос()

    Dim ворд As Object, doc As Object
   
    Set ворд = CreateObject("Word.Application")
    ворд.Visible = True
    Set doc = ворд.Documents.Open("C:\Users\User\Desktop\Результат.docx")
    [A1:C3].Copy
    doc.Range.InsertParagraphBefore
    doc.Range.PasteExcelTable False, False, False
   
End Sub
[свернуть]

Администратор

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

Если вы включите режим непечатаемых символов, то в конце абзаца увидите символ в виде буквы Р, которая повёрнута в другую сторону.
В конце каждого абзаца есть этот символ.

Может быть правильнее поставить задачу: вставить не в строку 2, а вставить в абзац 2?


Администратор

В коде укажите ваше полное имя ворд-файла (в коде есть пояснение).

Макрос
Sub Макрос()

    Dim ворд As Object, doc As Object, rng As Object
   
    Set ворд = CreateObject("Word.Application")
    ворд.Visible = True
   
    ' Здесь укажите ваше полное имя ворд-файла.
    Set doc = ворд.Documents.Open("C:\Users\User\Desktop\Результат.docx")
   
    [A1:C3].Copy
   
    ' Присваиваем имя "rng" фрагменту текста, в котором находится второй абзац.
    Set rng = doc.Paragraphs(2).Range
    ' Превращаем объект "rng" в точку вставки (аналог "мигающий курсор").
    rng.Collapse Direction:=1
    ' Вставка таблицы из буфера обмена в объект "rng".
    rng.PasteExcelTable False, False, False
   
End Sub
[свернуть]