Импорт 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


 

лешка

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

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

В общем всем привет)…. есть шаблоны и повторяется одна и та же работа (копирую текст из екселя в ворд  копи-пастом) , вот и задался вопросом. а как импортировать данные из таблицы в текс ворда.
У самого такая задумка, сначала фильтруем ну типа фильтр на организацию(по наименованию)  все  вот он текст…далее нужно его просто распихать по ворду..и вот тут я теряюсь)… пытался макросом, но там что то не получилось…., пытался вставить закладки тоже не получилось. Помогите люди добрые  или советом или решением..я думаю этот вопрос поднимался  и не раз,  злободневный он) Всем спасибо.
Два документа прилагаю, один таблица ексель — данные, второй ворд файл — шаблон(куда вносим данные). Я пометил цветом те данные которые копируются, одинаковым цветом.

Прикрепленные файлы

  • книга1.xlsm (21.29 КБ)
  • Договор.doc (19.02 КБ)

 

Hugo

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

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

#2

26.06.2014 16:04:29

Вот у меня в звгашнике лежит:

Код
http://programmersforum.ru/showthread.php?t=253768&page=4
Sub Вставить_в_отчет()

Dim WA As Object, WD As Object

Set WA = CreateObject("Word.Application")
Set WD = WA.Documents.Open("C:ШАБЛОНЫсвязкаshablon.docx")

WD.Range.Find.Execute FindText:="{$НОМПАТЕНТ01}", ReplaceWith:=Cells(2, 2), Replace:=2
WD.Range.Find.Execute FindText:="{$Наименовпатент01}", ReplaceWith:=Cells(2, 3), Replace:=2
WD.Range.Find.Execute FindText:="{$Названпатент01}", ReplaceWith:=Cells(2, 4), Replace:=2
WD.Range.Find.Execute FindText:="{$МПКпатент01}", ReplaceWith:=Cells(2, 5), Replace:=2
WD.Range.Find.Execute FindText:="{$датапублпатент01}", ReplaceWith:=Cells(2, 6), Replace:=2
WD.Range.Find.Execute FindText:="{$Статуспатент01}", ReplaceWith:=Cells(2, 7), Replace:=2
WD.Range.Find.Execute FindText:="{$Имязаявит01}", ReplaceWith:=Cells(2, 8), Replace:=2
WD.Range.Find.Execute FindText:="{$Номерзаявк01}", ReplaceWith:=Cells(2, 9), Replace:=2
WD.Range.Find.Execute FindText:="{$Датаподачзаяв01}", ReplaceWith:=Cells(2, 10), Replace:=2
WA.Visible = True
Set WA = Nothing

End Sub
 

Там по ссылке есть и оптимизация, и пример в файле.

Изменено: Hugo26.06.2014 16:07:27

 

Александр Моторин

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

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

#3

26.06.2014 16:11:00

Цитата
пытался вставить закладки тоже не получилос

А что не получилось-то?
Хоть бы сделал вордовский документ соответствующий выбранной позиции в ексел
А то я дальтоник и сложно ориентироваться по цветам.
И второй вариант: набрать шаблон в екселе и хранить его в скрытом листе.
В екселовском документе вставлять не по закладкам

 

лешка

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

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

#4

26.06.2014 16:19:49

Цитата
Александр Моторин пишет:
пытался вставить закладки тоже не получилос

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

 

Игорь

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

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

 

лешка

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

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

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

Изменено: лешка29.06.2014 20:34:07

 

Hugo

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

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

Там архив

Desktop.rar

(124.2 Кб,)  — сюда не влезет.

Кстати я сейчас по этой ссылке его скачал  :)
Но никуда переслать его с работы не могу.

Изменено: Hugo27.06.2014 10:02:33

 

лешка

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

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

#8

27.06.2014 10:07:54

Цитата
Игорь пишет: Готовое решение использовать не пробовали?

она платная и ее пилить еще надо… притом много пилить …и да пробовал но не получается что то

 

лешка

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

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

#9

27.06.2014 10:09:13

Цитата
Hugo пишет:
Кстати я сейчас по этой ссылке его скачал
Но никуда переслать его с работы не могу.

так может майл? почта или любои  фаил обменник

Изменено: лешка27.06.2014 10:11:31

 

Hugo

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

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

Зачем тот файл — всё ведь уже в теме есть, берите и переделывайте свой файл. А тот файл Вам не поможет — только покажет как это работает.

 

лешка

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

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

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

 

Hugo

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

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

Ну как работает — открыли документ, и заменяем ярлыки на значения ячеек таблицы. Макрос в экселе. Всё.
Можно добавить цикл по таблице и сохранение полученных файлов/документов.

А про макрос Игоря ничего не знаю, это вопросы к нему.

 

Юрий М

Модератор

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

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

лешка, без цитирования никак не обойтись?

 

лешка

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

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

так иногда непонятно на что человек отвечает ..а так все сразу и понятно..мне кажется так очень удобно…ладно приду домой попробую скачать тот файлик с примером…

 

Hugo

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

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

Кажется там без регистрации не скачать… Не помню точно, а может уже что и поменялось — разлогиниваться не хочу, пароль забыл :)

 

лешка

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

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

УСЕ  ) сам смог  там нужно было перередактировать логин..скачал глянул то что надо))…. единственный момент ..получается вставилась инфа и все те ссылки потерялись то есть одноразовый шаблон..

 

Hugo

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

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

Ну так saveas ему сразу, никтож не заставляет шаблон губить.

 

лешка

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

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

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

 

Игорь

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

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

#19

27.06.2014 13:19:53

Цитата
она платная и ее пилить еще надо… притом много пилить …и да пробовал но не получается что то

В том-то и дело, что пилить не надо, — всё давно продумано и реализовано.

И отфильтрованные данные поддерживаются, и формирование документа по нескольким выделенным строкам:

http://excelvba.ru/programmes/FillDocuments/Multirow

Если делать подобное «с нуля» — много времени уйдёт.

PS: Я не пытаюсь вам что-то продать, — по вашей фразе понятно, что платить вы не хотите, — просто я к тому, что универсальное решение в вашем случае будет сделать весьма сложно

 

лешка

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

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

#20

27.06.2014 13:27:40

Цитата
Игорь пишет: Я не пытаюсь вам что-то продать, — по вашей фразе понятно, что платить вы не хотите…

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

Изменено: лешка29.06.2014 20:35:57

 

Hugo

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

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

Пилите Шура, пилите…
Добавляйте в код переменную для selection.row. Или без переменной…
Или купите уже готовое  :)

 

лешка

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

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

так selection.row пойду изучать мат часть)..а готовое неготовое) ..его пилить надо…. было бы готовое я бы  и не переживал) а купил уже и радовался

 

лешка

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

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

[USER=29007][/USER] Hugo, хотя ) если вы доброты души широкой человек) вы то знаете)) куда надо поставить selection.row
чето каверкоет имя хуго))

Изменено: лешка27.06.2014 14:10:30

 

Юрий М

Модератор

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

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

Набирайте с клавиатуры или копируйте — не будет коверкать.

 

Hugo

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

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

Cells(2, 10) — это ячейка(2-я строка, 10-ый столбец)
Вот вместо 2 и пишите номер строки выделенной/активной ячейки. Или ячейки с меткой, или как там будете её определять — можно например искать номер строки, в которой «сидит» какой-то отобранный по определённому параметру клиент. Вывели диалог, его заполнили (записали, или выбрали из предложенного, или ещё как) — получили заполненный шаблон.

 

лешка

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

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

Hugo,  ааа без кнопки цитата тяжко) ррр… то есть в макросе каждый раз писать ? типа строчка 555 захожу в макрос ставлю) 555 и жму) это не вариант…

Изменено: лешка27.06.2014 14:41:46

 

Hugo

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

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

И что хотели цитировать? Я как-то обхожусь, и так ведь всё понятно.

Нет. Достаточно один раз (и навсегда) написать selection.row — и это всегда будет номер строки выделенной ячейки.
Ну если Вы не будете менять выделенную ячейку — тогда конечно этот номер тоже не будет меняться…
Или впишите туда переменную, значение которой будете чуть выше менять кодом.

 

Игорь

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

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

А вам надо сформировать столько документов, сколько организаций в списке?

т.е. если ООО «Белан» в таблице встречается 3 раза — надо для этих 3 строк сформировать один документ, в котором будет список адресов из 3 пунктов?

поскольку в таблице 7 разных организаций — должно получиться 7 файлов?

 

лешка

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

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

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

 

лешка

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

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

#30

30.06.2014 09:02:54

Hugo,не сработало) поставил а все равно первую строчку только выбирает
lRow = Selection.Row      даж так пытался, не получилось

Изменено: лешка30.06.2014 09:31:45

Skip to content

Как из Word перевести в Excel

На чтение 4 мин. Просмотров 7k.

Что делает макрос: Если вы обнаружите, что вы постоянно копируете данные и вставляете в Microsoft Word, вы можете использовать макрос, чтобы автоматизировать эту задачу.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

Перед тем как использовать макрос, очень важно к этому подготовиться. Чтобы подготовиться к процессу, вы должны иметь созданный шаблон 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. Шаг 1 объявляет четыре переменные: MyRange содержит целевой диапазон Excel; WD является переменной, которая предоставляет объект Application Word; wdDoc является переменной объекта, которая выставляет объект Word Document; wdRange является переменной объекта, которая выставляет объект Range Word.
  2. Шаг 2 копирует диапазон таблицы рабочего листа. В этом примере, диапазон жёсткий, но мы всегда можем сделать этот выбор в нечто более переменное.
  3. Шаг 3 открывает существующий целевой документ Word, который служит в качестве шаблона. Обратите внимание, что мы устанавливаем свойство Visible приложения Word, в True.
    Это гарантирует, что мы можем увидеть действие в Word, как работает код.
  4. Шаг 4 использует объект Range в Word, чтобы установить фокус на целевой закладке. Это по существу выбирает закладку в виде диапазона, что позволяет принимать меры в этом диапазоне.
  5. Шаг 5 удаляет любую таблицу, которая может существовать внутри закладки, а затем вставляет скопированный диапазон Excel. Если мы не будем удалять любые существующие таблицы, скопированный диапазон добавится к существующим данным.
  6. Когда вы копируете диапазон Excel в документ Word, ширина столбцов не всегда соответствуют содержанию в клетках. Шаг 6 устраняет эту проблему путем регулировки ширины столбцов. Здесь, ширина каждого столбца установлена как число, которое равно общей ширине таблицы, разделенной на число столбцов в таблице.
  7. Когда мы копируем диапазон Excel для целевой закладки, мы, по существу, перезаписываем закладку. Шаг 7 воссоздает закладку, чтобы гарантировать, что в следующий раз, когда вы запустите этот код, закладка будет.
  8. Очистка памяти

Как использовать

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

  • Документы Word
  • Создание файлов
  • Работа с файлами

Таблица Excel с исходными данными для создания документов 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

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


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

Добрый день, помогите пожалуйста довести до ума макрос , который бы экспортировал определенные данные из таблицы в виде таблицы
Excel в Word. Критерием для выбора определенной строки из всего объема таблицы служит отмеченный напротив нужной строки флажок.
Как это приблизительно должно выглядеть показано в приложенной таблице.
Вот что удалось получить:

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
31
32
Sub button_click()
 
End Sub
Sub Makros1()
 
Dim AppWord As Word.Application
 
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
 
AppWord.Documents.Add
 
Range("A5:G5").Copy
AppWord.Selection.Paste
 
For i = 6 To 10
 
If Cells(i, 18) = True Then
 
 
Cells(i, 1).Copy
AppWord.Selection.Paste
 
 
End If
 
Next
 
Application.CutCopyMode = False
Set AppWord = Nothing
 
End Sub

Единственное что, сейчас копируются выделенные ячейки только первого столбца, подскажите пожалуйста как можно расширить этот диапазон и как сделать так, чтобы заголовки таблицы и данные из таблицы брались не из всего диапазона таблицы, а выборочно (например ячейкa 3 столбца A, столбца C, диапазона E:G и т.д) и выводились в Word.
Буду очень признателен за любую помощь.

Вложения

Тип файла: xls table.xls (47.0 Кб, 584 просмотров)

Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

25.08.2010, 22:37

17

Busine2009

Заблокирован

28.08.2010, 06:24

2

E.v.g,
вот так копируется строка:

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
Sub Макрос1()
Dim AppWord As Word.Application
Dim i As Long
     
Set AppWord = CreateObject("Word.Application")
 
AppWord.Visible = True
AppWord.Documents.Add
 
Range("A5:G5").Copy
AppWord.Selection.Paste
 
For i = 6 To 10
    If Cells(i, 18) = True Then
        Range(Cells(i, 1), Cells(i, 16)).Copy
        AppWord.Selection.Paste
    End If
Next
 
Application.CutCopyMode = False
Set AppWord = Nothing
 
End Sub



1



E.v.g

28.08.2010, 12:26

3

Добрый день Busine2009, спасибо за ответ. В таком случае он копирует строку подряд,
подскажите пожалуйста как копировать строку выборочно, например области A6:B6, E6:G6, I6:L6 и так далее при тех же условиях.

Tinoo

-1 / 0 / 0

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

Сообщений: 75

20.06.2011, 15:05

4

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

Visual Basic
1
2
3
4
5
6
7
8
Sub main()
    Set wa = CreateObject("Word.Application")
    wa.Visible = True: Set wd = wa.Documents.Add
    wd.PageSetup.Orientation = 1
    [a1:l43].Copy
    wd.Range.PasteExcelTable False, False, False
    Application.CutCopyMode = False
End Sub



0



Makarona

1 / 1 / 0

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

Сообщений: 37

26.08.2011, 16:35

5

Добрый день!
бьюсь над переносом данных из Excel в Word.
Задача: по вордовским закладкам засунуть в документ определённые таблицы.

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

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
31
32
33
34
35
36
37
38
39
40
41
 Dim strDoc As String
    
     
    Dim wdApp As Word.Application, wdDoc As Word.Document, objDoc As Word.Document
    Dim xlRange As Excel.Range
    Dim exlR As Excel.Range
        
    Set wdApp = New Word.Application
    FilePath = ActiveWorkbook.Path
    Filename = "C:Documents and SettingsUserDesktopАвтоматизация.docx"
    
       Set objDoc = wdApp.Documents.Add(Template:=FilePath & "" & Filename)
     
     If objDoc Is Nothing Then
        MsgBox "Unable to find the Word file.", vbCritical, "File Not Found"
        wdApp.Quit
        Set appWrd = Nothing
        Exit Sub
    End If
  
 
 
  Set exlR = Лист6.Range("A2:B13")
 
 
     With objDoc.Bookmarks
        .Item("Первая_таблица").Range.InsertAfter exlR
     End With
 
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.StatusBar = False
 
    wdApp.Visible = True
    wdApp.ActiveDocument.SaveAs FilePath & "" & " Проба.docx"
     'Clean up
    Set wdApp = Nothing
    Set objDoc = Nothing
     
End Sub

Ругается на .Item(«Первая_таблица»).Range.InsertAfter exlR пишет Type MisMatch

Заранее спасибо за помощь. Надеюсь подскажете, а то ручками вставлять и связывать таблиц 35 в каждый документ регулярно…. ну очень нудно и долго



0



Busine2009

Заблокирован

26.08.2011, 17:47

6

Makarona,
скопируйте нужный диапазон ячеек в Excel, а затем вставьте в документ Word.



0



Makarona

1 / 1 / 0

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

Сообщений: 37

26.08.2011, 17:56

7

Busine2009,
Вы имеете ввиду следующее:

Visual Basic
1
2
3
4
5
6
exlR.Select
Selection.Copy
 
     With objDoc.Bookmarks
        .Item("Первая_таблица").Range.InsertAfter Selection
     End With

Я нечто подобное пробовала, но он опять выдаёт ту же ошибку на той же строке.
Или я неправильно Вас поняла?



0



Busine2009

Заблокирован

26.08.2011, 17:59

8

Здесь после Range поставьте точку и выберите что-нибудь связанное с Paste:

Цитата
Сообщение от Makarona
Посмотреть сообщение

.Item(«Первая_таблица»).Range.InsertAfter Selection

Здесь сразу можно копировать (выделять не надо перед копированием):

Цитата
Сообщение от Makarona
Посмотреть сообщение

exlR.Select

Чтобы вставить после закладки, то нужно по-другому написать. Если надо, то напишу.



0



1 / 1 / 0

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

Сообщений: 37

26.08.2011, 18:02

9

Busine2009,
подобное тоже пробовала…
говорит, что такой метод ему не знаком.
видимо, не всё с past перебрала…
но спасибо. Если Вы советуете тоже, что делала, значит капаю в нужном направлении…



0



Busine2009

Заблокирован

26.08.2011, 18:04

10

Код, на котором я тестировал:

Visual Basic
1
2
3
4
5
6
7
8
Sub Процедура1()
Dim Ворд As New Word.Application, Документ As Word.Document
Ворд.Visible = True
Set Документ = Ворд.Documents.Add
Документ.Bookmarks.Add Name:="Bookmark1", Range:=Документ.Range(0, 0)
Range("A1:B6").Copy
Документ.Bookmarks.Item("Bookmark1").Range.Paste
End Sub



1



1 / 1 / 0

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

Сообщений: 37

29.08.2011, 09:57

11

Busine2009,
спасибо!
теперь буду дописывать Ваш код под себя, чтоб таблицы были связаны, документ сам открывался.
зато Благодаря Вам у меня таблица вставляется, а не текст.

Добавлено через 14 минут
Хм, забавная вещь получается: кодом вставляется таблица, но она сама меняет место закладки.
т.е. получилось, что таблица попала в начало документа и говорит, что именно здесь была закладка 1
Хитрая, зараза))

Убрала строку
Документ.Bookmarks.Add Name:=»Bookmark1″, Range:=Документ.Range(0, 0)

и всё стало ок)



0



Busine2009

Заблокирован

29.08.2011, 10:07

12

Цитата
Сообщение от Makarona
Посмотреть сообщение

Документ.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



Busine2009

Заблокирован

29.08.2011, 11:42

14

Цитата
Сообщение от Makarona
Посмотреть сообщение

Как вставить эти таблицы связанными?

есть 2 варианта связанных таблиц:

  1. в виде рисунка;
  2. в виде таблицы.

Если вставить в виде рисунка, то таблица не будет переходить на следующую страницу, если она больше страницы.



0



1 / 1 / 0

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

Сообщений: 37

29.08.2011, 11:47

15

Busine2009,
мне всё в виде таблиц надо.



0



Busine2009

Заблокирован

29.08.2011, 12:31

16

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

Решение

Код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос1()
Dim Ворд As Word.Application
Dim Документ As Word.Document
'Чтобы работать с запущенной программой Word,
'надо использовать GetObject.
Set Ворд = GetObject(Class:="Word.Application")
'Подключение к активному документу Word.
Set Документ = Ворд.ActiveDocument
'Копирование диапазона ячеек из активной книги, из активного листа Excel.
ActiveWorkbook.ActiveSheet.Range("A1:E5").Copy
'Вставка скопированного в закладку с именем Закладка1.
'LinkedToExcel:=True - при обновлении данных в Excel, данные будут обновлены в Word.
'WordFormatting:=True - шрифт текста вставленной таблицы будет в соответствии со
'стилем Сетка таблица, а не как в Excel.
'RTF:=True - таблица будет использовать RTF, а не HTML (этого сам не понимаю).
Документ.Bookmarks("Закладка1").Range.PasteExcelTable _
    LinkedToExcel:=True, WordFormatting:=True, RTF:=True
'Снятие пунктирной линии в Excel после копирования.
Application.CutCopyMode = False
End Sub

Если не знаете, что написать в коде, то используйте макрорекордер:

В вашем случае надо было записать макрос в Word:

  1. скопируйте ячейки в Excel;
  2. перейдите в Word;
  3. включите макрорекордер;
  4. ПравкаСпециальная вставка…СвязатьТекст в формате RTFOK;
  5. отключите макрорекордер;
  6. перейдите в VBA;
  7. поставьте курсор на слово PasteExcelTable и нажмите клавишу F1;
  8. появится справка (правда на английском языке), по которой можно подкорректировать код.



3



1 / 1 / 0

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

Сообщений: 37

29.08.2011, 14:11

17

Вау!
немного переделала на то, чтоб открывался закрытый документ Word и формат Excel использовался. Всё, что нужно. Огромное спасибо за комментарии и описание. с Вами VBA выучу скоро.

а то программиста нашего не допросишься помочь. Легче самой написать…

Добавлено через 1 час 5 минут
Поняла смысл вот этой строки

Цитата
Сообщение от Busine2009
Посмотреть сообщение

‘RTF:=True — таблица будет использовать RTF, а не HTML (этого сам не понимаю).

Если поставить False, то остаётся форматирование Excel (если ячейки объединены, например), а если True, то все объединения ячеек сбиваются и таблица плывёт (особенно заголовки)



0



Makarona

1 / 1 / 0

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

Сообщений: 37

08.11.2011, 14:10

18

С таблицами более-менее понятно, а вот что делать с вставкой диаграмм так же из Excel в Word по закладкам? бъюсь над этим, но не могу поянть свою ошибку. Диаграмма вставляется, но в левыё верхний угол, а не по закладке. кусочек кода:

Visual Basic
1
2
3
4
5
6
7
8
Ëèñò1.ChartObjects("Ä_Ïðîäàæè1").Activate
           'активирую нужную диаграмму
  ActiveChart.ChartArea.Copy
           'копирую диаграмму
  Äîêóìåíò.Bookmarks.Item("Ä_Ïðîäàæè1").Select
           'выбираю нужную закладку в документе
  Âîðä.Selection.PasteSpecial Placement:=wdInLine
           'а тут вставляется диаграмма, но не на место закладки, а в начало документа

пробовала так:

Visual Basic
1
Âîðä.Selection.PasteAndFormat Placement:=wdInLine

не получилось

Помогите, плиз, скажите, в каком месте я — балда что-то не правильно пишу

Добавлено через 2 часа 43 минуты
Вроде немного разобралась
пока нашла такое решение, но если кто-нибудь оптимизирует или подправит меня, буду благодарна.

Visual Basic
1
2
3
4
Ëèñò1.ChartObjects("Ä_Ïðîäàæè1").Activate
    ActiveChart.ChartArea.Copy
  Äîêóìåíò.Bookmarks.Item("Ä_Ïðîäàæè1").Select
Âîðä.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine



0



Понравилась статья? Поделить с друзьями:
  • Импорт excel access программно
  • Импорт csv файлов в utf 8 в excel
  • Импорт csv в excel 2007
  • Импорт csv excel 2010
  • Имитация работы банка в excel