Вставка таблицы 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 Метки нет (Все метки)
Добрый день, помогите реализовать. такую фишку.
Вложения
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
07.09.2016, 11:42 |
2 |
|||
Так подойдёт ?
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, подумал над проблемой, можешь помочь с написанием кода. вот не много по другому записал ваш код. тоже рабочий до сохранения документа.
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 как решение Решение
P.S. В Вашей версии действительно наличествует несовпадение высоты строк, причём, довольно существенное. Workaround прилагается :
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»
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
16.09.2016, 12:11 |
15 |
|||
Например :
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 |
Всем привет. Ребята, помогите с переносом данных по каждой строке из Excel в типовую форму Word. Изменено: sincere658 — 06.04.2016 12:06:58 |
Jack_Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
sincere658 Пользователь Сообщений: 9 |
Спасибо, но там не совсем то, мне нужно чтобы данные в ворд выгружались |
jfd Пользователь Сообщений: 302 |
если я не ошибаюсь, есть стандартный функционал для такого рода действий — называется слияние |
в ворде есть функция СЛИЯНИЕ — стандартная функция, как раз для Вашего случая. Берет по строке из Екселя, вводит данные, а там где Вы метки поставите будет менять ФИО, и все что пометите. |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#7 06.04.2016 15:51:09
Зачем?! Храните данные в XL, форму — в Ворде. Слияние — по надобности: можно для персональных писем, для электронной рассылки и пр.пр. Оно вам надо, например, хранить полторы тысячи текстовых файлов, которые один раз только фспользовались?.. «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||
sincere658 Пользователь Сообщений: 9 |
#8 06.04.2016 15:59:24
Всё, ребята, разобрался. Спасибо за ответы! Можно закрывать тему. На самом деле даже неудобно, что потратил ваше время из-за такой ерунды. А я уже подумал придется лезть в изучение VBA |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#9 06.04.2016 18:36:42
Не помешает ) |
||
Перенос таблицы из Excel в Word при помощи макроса |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Уважаемые господа,
У меня очень часто может изменяться инфо из-за внесения корректировок. Есть годовой отчет компании в экселе (проводятся расчеты) и в ворде (описательная часть и таблицы). Таблиц много (около 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