Макрос для переноса таблицы excel в word

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

Работа с Word из кода VBA Excel
Часть 6. Вставка таблицы Excel в документ Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Метод Selection.PasteExcelTable

Метод Range.Paste, использующийся в VBA Word для вставки в документ таблиц, скопированных в буфер обмена из другого документа Word, не применим для вставки в документ таблиц, скопированных из книги Excel. Для этих целей используется метод Selection.PasteExcelTable.

Selection.PasteExcelTable — это метод, предназначенный для вставки Excel-таблицы из буфера обмена в документ Word и ее форматирования в соответствии с заданными параметрами.

Синтаксис

Expression.PasteExcelTable(LinkedToExcel, WordFormatting, RTF)

Expression — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.

Параметры

Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.

Параметр Описание
LinkedToExcel True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word.
False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается.
WordFormatting True — вставленная таблица будет отформатирована как таблица документа Word.
False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel.
RTF True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF).
False — Excel-таблица будет вставлена в формате HTML-таблицы.

Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки «Закладка1».

Решение:

Sub Primer()

Dim myWord As New Word.Application, myDoc As Word.Document

‘Открываем существующий документ Word

Set myDoc = myWord.Documents.Open(«C:ТестоваяДокумент1.docx»)

‘Копируем таблицу на активном листе в буфер обмена

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

Range(«A1»).CurrentRegion.Copy

‘Вставляем таблицу из буфера обмена на место закладки

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

‘Отображаем программу Word

myWord.Visible = True

‘Очищаем переменные

Set myWord = Nothing

Set myDoc = Nothing

End Sub

Если необходимо таблицу вставить в конец документа, строку

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

следует заменить на

With myDoc

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Добавляем перенос строки, если необходимо

    .ActiveWindow.Selection.InsertAfter vbCr

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Вставляем таблицу из буфера обмена

    .ActiveWindow.Selection.PasteExcelTable False, False, False

End With


Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

1

Копирование таблицы из экселя в ворд

07.09.2016, 11:28. Показов 13048. Ответов 20

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день, помогите реализовать. такую фишку.
Созданную таблицу в экселе нужно скопировать в ворд. пробовал написать код не вышло.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub ЭкспортВВОРД()
 
 
Dim adr As String
Dim copyTABL As Object
    
    adr = ActiveWorkbook.Path
 
ActiveWindow.SmallScroll Down:=27 
Range("A1:C39").Select
ActiveWindow.SmallScroll Down:=-39
Selection.Copy
 
Set oWord = CreateObject("Word.Application") 
    oWord.Visible = True
Set oDoc = oWord.Documents.Add()
    oDoc.Activate
    
    Selection.Paste 
    MyRange.Collapse Direction:=wdCollapseStart
    MyRange.Paste
   
 
End Sub

Вложения

Тип файла: rar Расчет и маршруты.rar (17.4 Кб, 21 просмотров)



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 11:42

2

Так подойдёт ?

Visual Basic
1
2
3
4
5
6
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

07.09.2016, 14:45

 [ТС]

3

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



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 15:31

4

В Word при масштабе 100% отличий(растягиваний) — не заметил.



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

07.09.2016, 15:45

 [ТС]

5

растягивание по вертикали. в общем должно вылезти на 1 лист.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 17:04

6

Если после копирования нельзя изменить высоту строк в таблице, то можете попробовать копировать рисунок и вставить не таблицу, а скриншот.



0



Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 09:31

 [ТС]

7

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

вот не много по другому записал ваш код. тоже рабочий до сохранения документа.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub ÝêñïîðòÂÂîðä()
 
Dim adr As String
Dim AppWord As Object
Dim oDoc As Object
 
adr = ActiveWorkbook.Path
 
Range("A1:C39").Copy
 
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
AppWord.Documents.Add
AppWord.Selection.Paste
AppWord.Activate
 
'ChangeFileOpenDirectory "adr"
    ActiveDocument.SaveAs Filename:="Îò÷åò î ïðîåçäå", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
    MsgBox ("Ôàéë ñîõðàíåí íà ðàáî÷èé ñòîë ïîä èìåíåì " & " '" & adr & " ' ")
 
 
    
 
Application.CutCopyMode = False
 
End Sub



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 10:44

8

Где макрос, который, цитирую «записанный в ворде на форматирование текста»



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 12:32

 [ТС]

9

еще не записал. его. записать то не долго, а потом запустить. пока бьюсь с проблемой сохранения..



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 13:34

10

Лучший ответ Сообщение было отмечено Soferon как решение

Решение

Visual Basic
1
2
3
4
5
6
7
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.PasteExcelTable False, False, True '.Range.Paste
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False

P.S. В Вашей версии действительно наличествует несовпадение высоты строк, причём, довольно существенное. Workaround прилагается :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 17:14

 [ТС]

11

ого уважаемый pashulka, , да вы супер..
Протестировал, все нравится новых фишек прикрутил. пытаюсь сразу же отправлять по почте. через аутлук. но почему не не прикладывает мой документ. можете помочь



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 17:15

 [ТС]

12

вордовский документ



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 18:05

13

Лучший ответ Сообщение было отмечено Soferon как решение

Решение

Смотрите аттач, только перед тестированием, не забудьте указать свою почту.



1



Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

16.09.2016, 11:33

 [ТС]

14

Что добавить в ваш код чтобы документ сохранялся со шрифтом «Times New Roman»

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

16.09.2016, 12:11

15

Например :

Visual Basic
1
2
With .Tables(1)
     .Range.Font.Name = "Times New Roman"



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

16.09.2016, 12:39

 [ТС]

16

Спасибо работает.



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

27.09.2016, 13:02

 [ТС]

17

Ну очень мне понравилась эта фишка, применяю везде где только можно. не много видо изменяя код. столкнулся с такой проблемой, во вложении файл Плана . нужно скопировать уже две таблицы с разных листов, с первым все получается на ура. вот со вторым не катит. все перепробовал. видел много в инете копирование по закладкам, но вот только диапазоны по закладкам не сопирутся, вставляет адрес диапазона. pashulka, можете чем помочь?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

27.09.2016, 14:58

18

Soferon, Об’единённые ячейки — это зло, тем паче в Word. Если исправите вторую таблицу, то получите необходимый результат, если нет, то после копирования второй таблицы, получите ошибку «Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали.»



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

27.09.2016, 15:43

 [ТС]

19

с этим я уже разобрался. мне то нужно перенести таблицы с разных листов в ворд по очереди. нашел тут одну тему попробую к ней прицепиться. потом отпишусь.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

27.09.2016, 20:27

20

Проблем, связанных с копированием с разных листов, особо не наблюдается (см.пример)



1



 

sincere658

Пользователь

Сообщений: 9
Регистрация: 06.04.2016

Всем привет. Ребята, помогите с переносом данных по каждой строке из Excel в типовую форму Word.
Задача:
есть база граждан с данными (ФИО, Дата рождения, место жительства и т.д.) например, после ввода в эту таблицу данных и ее закрытия или сохранения формировалась отдельно по каждой строке (по каждому гражданину) форма Word. Для наглядности, я приложил два файла ворд и эксель. В написании макросов не силен, перекопал много информации, но все, что находил кажется очень сложным, и переделать готовые решения под себя не в состоянии. Буду рад тем, кто откликнется

Изменено: sincere65806.04.2016 12:06:58

 

Jack_Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

sincere658

Пользователь

Сообщений: 9
Регистрация: 06.04.2016

Спасибо, но там не совсем то, мне нужно чтобы данные в ворд выгружались

 

jfd

Пользователь

Сообщений: 302
Регистрация: 01.01.1970

если я не ошибаюсь, есть стандартный функционал для такого рода действий — называется слияние

 

в ворде есть функция СЛИЯНИЕ — стандартная функция, как раз для Вашего случая. Берет по строке из Екселя, вводит данные, а там где Вы метки поставите будет менять ФИО, и все что пометите.
В ВОрде — рассылки — Начать слияние. Справа дале , далее… На третьем шаге справа будет — Существующий список, там нажимаете обзор, выбираете свой екселевский файл и используйте его как базу.

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

#7

06.04.2016 15:51:09

Цитата
sincere658 написал: мне нужно чтобы данные в ворд выгружались

Зачем?! Храните данные в XL, форму — в Ворде. Слияние — по надобности: можно для персональных писем, для электронной рассылки и пр.пр. Оно вам надо, например, хранить полторы тысячи текстовых файлов, которые один раз только фспользовались?.. ;)
ps А справочку по слиянию — внима-а-ательно почитайте.

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

sincere658

Пользователь

Сообщений: 9
Регистрация: 06.04.2016

#8

06.04.2016 15:59:24

Цитата
Z написал: ps А справочку по слиянию — внима-а-ательно почитайте.

Всё, ребята, разобрался. Спасибо за ответы! Можно закрывать тему. На самом деле даже неудобно, что потратил ваше время из-за такой ерунды. А я уже подумал придется лезть в изучение VBA :)

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#9

06.04.2016 18:36:42

Цитата
sincere658 написал: А я уже подумал придется лезть в изучение VBA

Не помешает )

Перенос таблицы из Excel в Word при помощи макроса

Govard88

Дата: Пятница, 04.12.2015, 16:48 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Вечер добрый.
Столкнулся с задачей, что нужно переносить готовые сводные таблицы (которые создаются макросом) в файл Word, да и еще с готовым и динамичным оформлением.
Как связать VBA Word и Excel не знаю, таблиц много и задача ежедневная.
Будьте добры, расскажите как автоматизировать такую задачу.

Подготовил маленький пример, дабы было понятно о чем речь
В Excel что было и в Word что должно стать, таблицы более массивные, но это для примера.

 

Ответить

SLAVICK

Дата: Пятница, 04.12.2015, 18:03 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

Как-то так:
[vba]

Код

Sub d()
Dim appWD As Word.Application
Set appWD = CreateObject(«Word.Application»)
    Range(«A1:C7»).Copy
    appWD.Documents.Add
    appWD.ActiveDocument.Range.PasteSpecial , , wdInLine, , wdPasteOLEObject
    appWD.Visible = True
End Sub

[/vba]
Если не сработает — подключите библиотеку microsoft.word в vba

если нужна вставка как таблицы — то wdPasteOLEObject
— вставка как картинки wdPasteMetafilePicture


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICKПятница, 04.12.2015, 18:07

 

Ответить

Govard88

Дата: Среда, 09.12.2015, 10:08 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

SLAVICK, Спасибо большое, все работает
А библиотеки не было, всегда считал, что VBA в офисе работает без доп.настроек между своими приложениями.

 

Ответить

Dana0856

Дата: Вторник, 09.07.2019, 14:57 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

SLAVICK, буду вам благодарна если подскажите как создать макрос, который переводит данные построчно записи excel в новый созданный файл word. Каждой строке соответствует свой файл. То есть передать данные строки таблицы, а не всей таблицы excel в определенной форме в файле word.

Я пыталась сделать что-то такое на оснвое вашего кода. Сама программирую на с++. Если найдете время, буду очень вам благодарна.

 

Ответить

Pelena

Дата: Вторник, 09.07.2019, 16:37 |
Сообщение № 5

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Dana0856, прочитайте Правила форума, создайте свою тему, приложите файл с примером.
Эта тема закрыта


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Уважаемые господа,
У меня очень часто может изменяться инфо из-за внесения корректировок. Есть годовой отчет компании в экселе (проводятся расчеты) и в ворде (описательная часть и таблицы). Таблиц много (около 12). Все разбросаны по тексту. Структура таблиц в Ворде и в Экселе отличается (некоторые ячейки не надо переносить или отличается их порядок). Пытался решить эту задачу с помощью ссылок в ворд документе — возникла проблема — ссылок слишком много — зависает ворд или комп. Думаю, что можно реализовать эту задачу через макрос — взять данные из определнной ячейки в эксель файле и вставить в определенную ячейку в таблице в ворд файле — но не могу сообразить как сделать перенос данных в точно определенное место документа. МОжет быть надо создавать закладки в ворд документе? но как тогда пишется в макросе вставка данных именно где определнная закладка? и если делаются закладки на каждую ячейку таблицы — то их будет слишком много — около 500. Пример таблиц в приложении.


Если надо связать всю таблицу целиком, можно использовать связывание таблиц.
Если нужно куда-то вставить отдельные данные — слиянием в Word.


к сожалению, это не помогло, т.к. структура файлов в экселе не позволяет этого сделать — там идут таблицы одна под другой на одном листе. Кроме того, не сохраняется форма отображения цифр с разделителями разрядов.


Решение проблемы нашел сам — заполнение файла ворд решил делать из экселя — так мне понятнее — недостаток — надо заранее в ворд документе проставлять закладки — макрос получился такой:
Sub FillingWordFile()
Dim WD
Dim XL As Excel.Application
    Set WD = CreateObject(«Word.Application»)
    WD.Visible = True
    WD.Documents.Open Filename:=Application.ThisWorkbook.Path & «название файла.doc»

        Range(«адрес ячейки«).Copy
    WD.ActiveDocument.Bookmarks.Item(«название закладки«).Range.Paste

    End Sub

При переносе цифры вставляются с разделителями разрядов (как в эксель файле) — как мне и надо было. ТОлько не могу понять как сделать выравнивание этих данных по правому краю именно скопрированной информации (она вставляется в ячейку таблицы ворд документа). Пытался через .Alignment = wdAlignParagrathRight — но не пойму как поределить переменную. Может кто знает как это сделать?


Во-первых не переменную, а константу. Во-вторых Вы написали ее имя с ошибкой, правильно — wdAlignParagraphRight. В третьих Эксел не знает констант Ворда, так что пишите : .Alignment = 2.
Если в дальнейшем возникнет необходимость узнать значение константы, делается это просто. В окне Immediate пишем ?wdAlignParagraphRight и жмем Энтер. Получаем значение.

П.С. в Вашем коде декларация: Dim XL As Excel.Application лишняя.

Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771


А вот у меня такой вопрос возник — почему Вы не хотите в Excel формулами создать дополнительные таблицы такого же формата, как нужно в ворде и потом вставить их в ворд связью. Я, например, очень часто так делаю. И весит не много, и работает быстро, и обновляется автоматически. Тем более, что таких таблиц всего 12.

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Спасибо KuklP за корректировку ошибку в спелинге — позже проверю на практике.
_Boroda_ я очень часто прислушиваюсь к вашим рекомендациям на форуме, но в моей ситуации вставка связанной таблицы (на сколько я понял это через «Paste Special — Paste link — Microsoft Office Excel Worksheet Object») не подходит, потому что надо отправлять полученный документ для комментариев (исправлений), и в таком случае нельзя изменять значения в полях вставленной таблицы в ворде.


1. Можно просто (как я и делаю у себя) пересохранить файл с другим названием, разорвать связи и отправить его дальше.
2. А можно вставлять не связью, а значением (мне не нравится — приходится при каждом изменении перевставлять таблицы)

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Понравилась статья? Поделить с друзьями:
  • Макрос для переноса строки в excel
  • Макрос для переноса столбцов в excel
  • Макрос для переноса в один столбец excel
  • Макрос для перемещения строк в excel
  • Макрос для переименования файлов в excel