Вставка таблицы 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 |
лешка Пользователь Сообщений: 62 |
В общем всем привет)…. есть шаблоны и повторяется одна и та же работа (копирую текст из екселя в ворд копи-пастом) , вот и задался вопросом. а как импортировать данные из таблицы в текс ворда. Прикрепленные файлы
|
Hugo Пользователь Сообщений: 23252 |
#2 26.06.2014 16:04:29 Вот у меня в звгашнике лежит:
Там по ссылке есть и оптимизация, и пример в файле. Изменено: Hugo — 26.06.2014 16:07:27 |
||
Александр Моторин Пользователь Сообщений: 958 |
#3 26.06.2014 16:11:00
А что не получилось-то? |
||
лешка Пользователь Сообщений: 62 |
#4 26.06.2014 16:19:49
не скрытый лист нельзя, там люди еще другие будут и иногда вручную нужно будет редактировать …а про закладки там у меня почему то вверх кидает а не в текс, если цвет ненаешь)) то там простои шаблон ..данные видно какие вставлять ну по типу наименование) и там название организации, инн , номер регистрации, адрес) |
||
Игорь Пользователь Сообщений: 3631 |
|
лешка Пользователь Сообщений: 62 |
Hugo, не могу скачать по ссылке, пример архива пишет типа у профиля нет разрешении, скачайте пожалуйста Изменено: лешка — 29.06.2014 20:34:07 |
Hugo Пользователь Сообщений: 23252 |
Там архив Desktop.rar (124.2 Кб,) — сюда не влезет. Кстати я сейчас по этой ссылке его скачал Изменено: Hugo — 27.06.2014 10:02:33 |
лешка Пользователь Сообщений: 62 |
#8 27.06.2014 10:07:54
она платная и ее пилить еще надо… притом много пилить …и да пробовал но не получается что то |
||
лешка Пользователь Сообщений: 62 |
#9 27.06.2014 10:09:13
так может майл? почта или любои фаил обменник Изменено: лешка — 27.06.2014 10:11:31 |
||
Hugo Пользователь Сообщений: 23252 |
Зачем тот файл — всё ведь уже в теме есть, берите и переделывайте свой файл. А тот файл Вам не поможет — только покажет как это работает. |
лешка Пользователь Сообщений: 62 |
верно я и хочу понять как работает … а если вы про палатный пример ..так там все не так просто ,и исходников я невижу … там нужно переделать многое |
Hugo Пользователь Сообщений: 23252 |
Ну как работает — открыли документ, и заменяем ярлыки на значения ячеек таблицы. Макрос в экселе. Всё. А про макрос Игоря ничего не знаю, это вопросы к нему. |
Юрий М Модератор Сообщений: 60581 Контакты см. в профиле |
лешка, без цитирования никак не обойтись? |
лешка Пользователь Сообщений: 62 |
так иногда непонятно на что человек отвечает ..а так все сразу и понятно..мне кажется так очень удобно…ладно приду домой попробую скачать тот файлик с примером… |
Hugo Пользователь Сообщений: 23252 |
Кажется там без регистрации не скачать… Не помню точно, а может уже что и поменялось — разлогиниваться не хочу, пароль забыл |
лешка Пользователь Сообщений: 62 |
УСЕ ) сам смог там нужно было перередактировать логин..скачал глянул то что надо))…. единственный момент ..получается вставилась инфа и все те ссылки потерялись то есть одноразовый шаблон.. |
Hugo Пользователь Сообщений: 23252 |
Ну так saveas ему сразу, никтож не заставляет шаблон губить. |
лешка Пользователь Сообщений: 62 |
Hugo, и вот теперь главный вопрос , допустим у меня в таблице миллион данных , я ставлю фильтр , нахожду и отображаю только эту запись ..но выборка идет по строчка…. и он серавно в шаблоне укажет 2 строчку к примеру.( я выбрал 345)…а как мне сделать так чтобы он указывал то что в данный момент в ячейках отображается… варинт заменить все цифры в шаблоне) на допустим строчку 345)) но эт не дело же… |
Игорь Пользователь Сообщений: 3631 |
#19 27.06.2014 13:19:53
В том-то и дело, что пилить не надо, — всё давно продумано и реализовано. И отфильтрованные данные поддерживаются, и формирование документа по нескольким выделенным строкам: http://excelvba.ru/programmes/FillDocuments/Multirow Если делать подобное «с нуля» — много времени уйдёт. PS: Я не пытаюсь вам что-то продать, — по вашей фразе понятно, что платить вы не хотите, — просто я к тому, что универсальное решение в вашем случае будет сделать весьма сложно |
||
лешка Пользователь Сообщений: 62 |
#20 27.06.2014 13:27:40
а я бы купил)) еслиб пилить не надо было… а так пилить и так и так..но посмотрю то что вы написали возможно будет мелкии допил..эт гуд Изменено: лешка — 29.06.2014 20:35:57 |
||
Hugo Пользователь Сообщений: 23252 |
Пилите Шура, пилите… |
лешка Пользователь Сообщений: 62 |
так selection.row пойду изучать мат часть)..а готовое неготовое) ..его пилить надо…. было бы готовое я бы и не переживал) а купил уже и радовался |
лешка Пользователь Сообщений: 62 |
[USER=29007][/USER] Hugo, хотя ) если вы доброты души широкой человек) вы то знаете)) куда надо поставить selection.row Изменено: лешка — 27.06.2014 14:10:30 |
Юрий М Модератор Сообщений: 60581 Контакты см. в профиле |
Набирайте с клавиатуры или копируйте — не будет коверкать. |
Hugo Пользователь Сообщений: 23252 |
Cells(2, 10) — это ячейка(2-я строка, 10-ый столбец) |
лешка Пользователь Сообщений: 62 |
Hugo, ааа без кнопки цитата тяжко) ррр… то есть в макросе каждый раз писать ? типа строчка 555 захожу в макрос ставлю) 555 и жму) это не вариант… Изменено: лешка — 27.06.2014 14:41:46 |
Hugo Пользователь Сообщений: 23252 |
И что хотели цитировать? Я как-то обхожусь, и так ведь всё понятно. Нет. Достаточно один раз (и навсегда) написать selection.row — и это всегда будет номер строки выделенной ячейки. |
Игорь Пользователь Сообщений: 3631 |
А вам надо сформировать столько документов, сколько организаций в списке? т.е. если ООО «Белан» в таблице встречается 3 раза — надо для этих 3 строк сформировать один документ, в котором будет список адресов из 3 пунктов? поскольку в таблице 7 разных организаций — должно получиться 7 файлов? |
лешка Пользователь Сообщений: 62 |
Игорь,там да есть одинаковые организации но эта одна и та же организация у нее только разные адреса..хотя бывают и одинаковые организации наименованием но инн и все остальное другое. |
лешка Пользователь Сообщений: 62 |
#30 30.06.2014 09:02:54 Hugo,не сработало) поставил а все равно первую строчку только выбирает Изменено: лешка — 30.06.2014 09:31:45 |
Skip to content
Как из Word перевести в Excel
На чтение 4 мин. Просмотров 7k.
Что делает макрос: Если вы обнаружите, что вы постоянно копируете данные и вставляете в Microsoft Word, вы можете использовать макрос, чтобы автоматизировать эту задачу.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Перед тем как использовать макрос, очень важно к этому подготовиться. Чтобы подготовиться к процессу, вы должны иметь созданный шаблон Word . В этом документе, указать закладку, где вы хотите, чтобы ваши данные из Excel разместились.
Чтобы создать закладку в документе Word, поместите курсор в нужное место, выберите вкладку Вставка — Закладка. Это активизирует диалоговое окно Закладка, где вы назначаете имя
для закладки. После того, как назначено имя, нажмите кнопку Добавить.
Один из файлов образцов для этой части является документ под названием PasteTable.docx. Это документ представляет собой простой шаблон, который содержит одну закладку под названием DataTableHere. В этом примере кода вы скопируете диапазон к этому
шаблону PasteTable.docx, используя закладку DataTableHere, чтобы указать, где вставить скопированный диапазон.
Кроме того, необходимо установить ссылку на библиотеку объектов Microsoft Word.
Код макроса
Sub OtpravitDannieIzExcelVWord() 'Шаг 1: Объявляем переменные Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range 'Шаг 2: Скопируйте определенный диапазон Sheets("таблица доходов").Range("B4:F10").Copy 'Шаг 3: Откройте целевой документ Word Set wd = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "" & "PasteTable.docx") wd.Visible = True 'Шаг 4: Установить фокус на целевую закладку Set WdRange = wdDoc.Bookmarks("DataTableHere").Range 'Шаг 5: Удалить старую таблицу и вставить новую On Error Resume Next WdRange.Tables(1).Delete WdRange.Paste 'вставить в таблицу 'Шаг 6: Отрегулируйте ширину столбца WdRange.Tables(1).Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth 'Шаг 7: Вставьте закладку wdDoc.Bookmarks.Add "DataTableHere", WdRange 'Шаг 8: Очистка памяти Set wd = Nothing Set wdDoc = Nothing Set WdRange = Nothing End Sub
Как этот код работает
- Шаг 1 объявляет четыре переменные: MyRange содержит целевой диапазон Excel; WD является переменной, которая предоставляет объект Application Word; wdDoc является переменной объекта, которая выставляет объект Word Document; wdRange является переменной объекта, которая выставляет объект Range Word.
- Шаг 2 копирует диапазон таблицы рабочего листа. В этом примере, диапазон жёсткий, но мы всегда можем сделать этот выбор в нечто более переменное.
- Шаг 3 открывает существующий целевой документ Word, который служит в качестве шаблона. Обратите внимание, что мы устанавливаем свойство Visible приложения Word, в True.
Это гарантирует, что мы можем увидеть действие в Word, как работает код. - Шаг 4 использует объект Range в Word, чтобы установить фокус на целевой закладке. Это по существу выбирает закладку в виде диапазона, что позволяет принимать меры в этом диапазоне.
- Шаг 5 удаляет любую таблицу, которая может существовать внутри закладки, а затем вставляет скопированный диапазон Excel. Если мы не будем удалять любые существующие таблицы, скопированный диапазон добавится к существующим данным.
- Когда вы копируете диапазон Excel в документ Word, ширина столбцов не всегда соответствуют содержанию в клетках. Шаг 6 устраняет эту проблему путем регулировки ширины столбцов. Здесь, ширина каждого столбца установлена как число, которое равно общей ширине таблицы, разделенной на число столбцов в таблице.
- Когда мы копируем диапазон Excel для целевой закладки, мы, по существу, перезаписываем закладку. Шаг 7 воссоздает закладку, чтобы гарантировать, что в следующий раз, когда вы запустите этот код, закладка будет.
- Очистка памяти
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
- Документы Word
- Создание файлов
- Работа с файлами
Макрос предназначен для программного создания документов Word на основе шаблона
(без использования функции слияния в Word)
В прикреплённом к статье архиве находятся 2 файла:
- шаблон договора в формате Microsoft Word (расширение .dot)
- файл Excel с макросом
Настройки макроса задаются в коде:
Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»
При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)
Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)
Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc
PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.
Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))
Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.
В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.
По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.
- 197068 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
E.v.g |
||||||
1 |
||||||
25.08.2010, 22:37. Показов 35765. Ответов 17 Метки нет (Все метки)
Добрый день, помогите пожалуйста довести до ума макрос , который бы экспортировал определенные данные из таблицы в виде таблицы
Единственное что, сейчас копируются выделенные ячейки только первого столбца, подскажите пожалуйста как можно расширить этот диапазон и как сделать так, чтобы заголовки таблицы и данные из таблицы брались не из всего диапазона таблицы, а выборочно (например ячейкa 3 столбца A, столбца C, диапазона E:G и т.д) и выводились в Word. Вложения
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.08.2010, 22:37 |
17 |
Заблокирован |
||||
28.08.2010, 06:24 |
2 |
|||
E.v.g,
1 |
E.v.g |
|
28.08.2010, 12:26 |
3 |
Добрый день Busine2009, спасибо за ответ. В таком случае он копирует строку подряд, |
Tinoo -1 / 0 / 0 Регистрация: 09.03.2011 Сообщений: 75 |
||||
20.06.2011, 15:05 |
4 |
|||
Вот код, который увеличивает диапазон, по другому вопросу ответа не знаю.
0 |
Makarona 1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
||||
26.08.2011, 16:35 |
5 |
|||
Добрый день! на разных сайтах нашла варианты решений, понравился один, подогнала под себя а выдаёт ошибку. Вот кусок. Подсткажите, плиз, чтож я делаю неправильно
Ругается на .Item(«Первая_таблица»).Range.InsertAfter exlR пишет Type MisMatch Заранее спасибо за помощь. Надеюсь подскажете, а то ручками вставлять и связывать таблиц 35 в каждый документ регулярно…. ну очень нудно и долго
0 |
Заблокирован |
|
26.08.2011, 17:47 |
6 |
Makarona,
0 |
Makarona 1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
||||
26.08.2011, 17:56 |
7 |
|||
Busine2009,
Я нечто подобное пробовала, но он опять выдаёт ту же ошибку на той же строке.
0 |
Заблокирован |
|
26.08.2011, 17:59 |
8 |
Здесь после Range поставьте точку и выберите что-нибудь связанное с Paste:
.Item(«Первая_таблица»).Range.InsertAfter Selection Здесь сразу можно копировать (выделять не надо перед копированием):
exlR.Select Чтобы вставить после закладки, то нужно по-другому написать. Если надо, то напишу.
0 |
1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
|
26.08.2011, 18:02 |
9 |
Busine2009,
0 |
Заблокирован |
||||
26.08.2011, 18:04 |
10 |
|||
Код, на котором я тестировал:
1 |
1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
|
29.08.2011, 09:57 |
11 |
Busine2009, Добавлено через 14 минут Убрала строку и всё стало ок)
0 |
Заблокирован |
|
29.08.2011, 10:07 |
12 |
Документ.Bookmarks.Add Name:=»Bookmark1″, Range:=Документ.Range(0, 0) это ж вставка закладки в документ, а у вас уже все закладки вставлены.
0 |
1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
|
29.08.2011, 11:22 |
13 |
Busine2009, да, сначала вставила всё тупо, потом код прочитала. С утра туго соображаю… Добавлено через 1 час 11 минут
0 |
Заблокирован |
|
29.08.2011, 11:42 |
14 |
Как вставить эти таблицы связанными? есть 2 варианта связанных таблиц:
Если вставить в виде рисунка, то таблица не будет переходить на следующую страницу, если она больше страницы.
0 |
1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
|
29.08.2011, 11:47 |
15 |
Busine2009,
0 |
Заблокирован |
||||
29.08.2011, 12:31 |
16 |
|||
Сообщение было отмечено как решение РешениеКод:
Если не знаете, что написать в коде, то используйте макрорекордер: В вашем случае надо было записать макрос в Word:
3 |
1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
|
29.08.2011, 14:11 |
17 |
Вау! а то программиста нашего не допросишься помочь. Легче самой написать… Добавлено через 1 час 5 минут
‘RTF:=True — таблица будет использовать RTF, а не HTML (этого сам не понимаю). Если поставить False, то остаётся форматирование Excel (если ячейки объединены, например), а если True, то все объединения ячеек сбиваются и таблица плывёт (особенно заголовки)
0 |
Makarona 1 / 1 / 0 Регистрация: 27.07.2011 Сообщений: 37 |
||||||||||||
08.11.2011, 14:10 |
18 |
|||||||||||
С таблицами более-менее понятно, а вот что делать с вставкой диаграмм так же из Excel в Word по закладкам? бъюсь над этим, но не могу поянть свою ошибку. Диаграмма вставляется, но в левыё верхний угол, а не по закладке. кусочек кода:
пробовала так:
не получилось Помогите, плиз, скажите, в каком месте я — балда что-то не правильно пишу Добавлено через 2 часа 43 минуты
0 |