Макрос таблица 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


  • Документы 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 доступна для бесплатного скачивания.

Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.

Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.

  • 197090 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

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



VBA — это очень мощный инструмент, который можно использовать для автоматизации большой работы между несколькими приложениями Microsoft Office. Одним из распространенных действий, которые вы можете автоматизировать с помощью VBA, является вставка таблицы Excel в документ Word.

Visual Basic для приложений (VBA) — очень мощный инструмент, который можно использовать для автоматизации большой работы между несколькими приложениями Microsoft Office. Одним из распространенных действий, которые вы можете автоматизировать с помощью VBA, является вставка таблицы Excel в документ Word.

Есть два способа сделать это. Первый — это автоматическое копирование и вставка существующего диапазона из Excel в новую таблицу в документе Word. Второй — выполнение расчетов в Excel, создание новой таблицы в Word и запись результатов в таблицу.

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

В обоих примерах мы начнем с образца электронной таблицы Excel. Этот образец представляет собой список заказов на покупку различных продуктов.

пример заказов на покупку

Допустим, вы хотите скопировать и вставить весь диапазон ячеек на этом листе в документ Word. Для этого вам нужно написать функцию VBA, которая будет запускаться при нажатии кнопки «Копировать в слово».

Выбрать разработчик из меню и выберите Вставить из группы управления на ленте. В раскрывающемся списке выберите элемент управления «Кнопка» в разделе «Элементы управления ActiveX».

вставка кнопки в Excel

Затем нарисуйте командную кнопку на правой стороне листа. Вы можете изменить заголовок на «Копировать в Word», щелкнув правой кнопкой мыши по кнопке и выбрав свойства, Измените текст заголовка, и вы можете использовать шрифт для обновления размера и стиля шрифта.

Рисование кнопки в Excel

Запись: Если вы не видите разработчик в меню Excel, затем добавьте его. Выбрать файл, Опции, Настроить лентуи выберите Все команды из выпадающего списка слева. Тогда двигайся разработчик от левой панели вправо и выберите OK, чтобы закончить.

Напишите копию и вставьте код VBA

Теперь вы готовы начать писать код VBA. Чтобы начать, дважды щелкните новый Копировать в Word кнопка, чтобы открыть окно редактора кода.

Вы должны увидеть подпрограмму с именем Commandbutton1_Click (), как показано ниже.

командная кнопка

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

В редакторе кода выберите инструменты из меню и выберите Ссылки, В списке доступных ссылок прокрутите вниз и включите Библиотека объектов Microsoft Word 16.0,

включить ссылку на слово

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

Во-первых, вам нужно создать переменные и объекты, которые будут содержать диапазон и позволять вам управлять приложением Word.

Dim tblRange As Excel.Range
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordTable As Word.Table

Следующая строка кода выбирает определенный диапазон ячеек и сохраняет его в объекте диапазона Excel в VBA.

Set tblRange = ThisWorkbook.Worksheets("Sheet1").Range("A2:G44")

Затем вы хотите проверить, открыто ли приложение Word на компьютере. Для этого вы можете ссылаться на приложение Word, используя специальную ссылку «класс» с командой VBA GetObject. Если Word еще не открыт, то следующая строка запустит его с помощью функции CreateObject. Строка «On Error Resume Next» предотвращает любую ошибку первой функции GetObject (если Word еще не открыт) останавливать выполнение следующей строки в программе.

On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

Теперь, когда приложение Word запущено, вы хотите сделать его видимым для пользователя и активировать его для использования.

WordApp.Visible = True
WordApp.Activate

Далее вы хотите создать новый документ в приложении Word.

Set WordDoc = WordApp.Documents.Add

Наконец, вы скопируете и вставите диапазон ячеек в новую таблицу в документе Word.

tblRange.Copy
WordDoc.Paragraphs(1).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False

Переключатели в вышеупомянутой функции вставят несвязанную таблицу, используя исходное форматирование Excel (не форматирование Word) и не используя расширенный текстовый формат.

Наконец, для работы с диапазонами Excel, которые шире, чем документ, вам нужно автоматически установить новую таблицу, чтобы она соответствовала полям вашего нового документа Word.

Set WordTable = WordDoc.Tables(1)
WordTable.AutoFitBehavior (wdAutoFitWindow)

И теперь вы сделали! Сохраните файл как файл Excel с поддержкой макросов (расширение .xlsm). Закройте редактор, снова сохраните исходный файл Excel, а затем нажмите командную кнопку, чтобы увидеть код в действии!

таблица в слове

Записать результаты Excel в таблицу Word с помощью VBA

В следующем разделе вы напишете код VBA, который выполняет вычисления значений в Excel и записывает их в таблицу в Word.

Для этого примера мы возьмем данные на 10 строк, вычислим и запишем результаты в таблицу в документе Word. Кроме того, исходная таблица будет содержать четыре столбца, а код VBA извлечет первые десять строк данных из этого диапазона.

образец таблицы

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

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

Dim tblRange As Excel.Range
Dim WrdRange As Word.Range
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordTable As Word.Table
Dim intRows
Dim intColumns
Dim strDate As String
Dim strItem As String
Dim intUnits As Variant
Dim intCost As Variant
Dim intTotal As Variant

Затем установите общее количество столбцов и строк, которые вы хотите прочитать из диапазона Excel.


intNoOfRows = 10
intNoOfColumns = 5

Повторите тот же код, что и в последнем разделе, который откроет Word, если он еще не открыт.

On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")
WordApp.Visible = True
WordApp.Activate
Set WordDoc = WordApp.Documents.Add

Следующие четыре строки создают таблицу внутри вновь открытого документа Word.

Set WrdRange = WordDoc.Range(0, 0)
WordDoc.Tables.Add WrdRange, intNoOfRows, intNoOfColumns
Set WordTable = WordDoc.Tables(1)
WordTable.Borders.Enable = True

Наконец, следующий цикл выполнит эти действия:

  1. Для каждой строки поместите дату заказа, позицию, единицы и стоимость в переменные
  2. Рассчитайте стоимость за единицу времени (общую продажу) и сохраните ее в переменной
  3. Для каждого столбца запишите значения в таблицу Word, включая рассчитанный общий объем продаж в последней ячейке.
  4. Перейдите к следующему ряду и повторите процедуру выше

Вот как выглядит этот код:

For i = 1 To intNoOfRows
For j = 1 To intNoOfColumns
If j = 1 Then
strDate = tblRange.Cells(i + 1, j).Value
strItem = tblRange.Cells(i + 1, j + 1).Value
intUnits = Val(tblRange.Cells(i + 1, j + 2).Value)
intCost = Val(tblRange.Cells(i + 1, j + 3).Value)
intTotal = intUnits * intCost
End If
Select Case j
Case Is = 1
WordTable.Cell(i, j).Range.Text = strDate
Case Is = 2
WordTable.Cell(i, j).Range.Text = strItem
Case Is = 3
WordTable.Cell(i, j).Range.Text = intUnits
Case Is = 4
WordTable.Cell(i, j).Range.Text = intCost
Case Is = 5
WordTable.Cell(i, j).Range.Text = intTotal
Case Else
End Select
Next
Next

Функция «Ячейки» в первой части извлекает значения ячеек из Excel. Ячейки (x, y) означают, что он извлекает значение ячейки в строке x и столбце y.
Функция «Ячейка» в последней части записывает данные в ячейки таблицы Word, используя те же назначения строк и столбцов.

После сохранения и запуска этого кода VBA вы увидите результаты в только что созданном документе Word.

результаты таблицы слов

Как видите, не так сложно создать полезную автоматизацию между Excel и Word. Это просто вопрос понимания того, как работают различные «объекты», которые могут создавать и контролировать приложения Excel и Word на вашем компьютере.

Перенос таблицы из 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

 

Ответить

Всех приветствую!
Возникла задача автоматизации формирования таблицы в документе Word из данных, вводимых в таблицу Excel.

  1. Имеется таблица Excel

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

  1. Имеется сам типовой Word документ
    Таблица в документе должна быть заполнена данными из таблицы Excel и в зависимости от количества пунктов (№ п/п) расширяться полями (в качестве примера приведены пустые поля).
    введите сюда описание изображения
  2. Имеется пример кода, который нашел на просторах интернета:
    Думал переделать под свои задачи, но пока не знаю с чего именно начать.
Sub main()
Dim wdApp As Object
Dim wdDoc As Object

HomeDir$ = ThisWorkbook.Path
Set wdApp = CreateObject("Word.Application")
i% = 2
Do
If Cells(i%, 1).Value = "" Then Exit Do
If Cells(i%, 1).Value <> "" Then

NPP$ = Cells(i%, 1).Text
ID$ = Cells(i%, 2).Text
Adress$ = Cells(i%, 3).Text
SN$ = Cells(i%, 4).Text

DataC$ = Date

FileCopy HomeDir$ + "template.doc", HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc"
Set wdDoc = wdApp.Documents.Open(HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc")

wdDoc.Range.Find.Execute FindText:="&date", ReplaceWith:=DataC$

wdDoc.Range.Find.Execute FindText:="&id", ReplaceWith:=ID$
wdDoc.Range.Find.Execute FindText:="&adress", ReplaceWith:=Adress$
wdDoc.Range.Find.Execute FindText:="&sn", ReplaceWith:=SN$

wdDoc.Save
wdDoc.Close
End If

i% = i% + 1
Loop
wdApp.Quit
MsgBox "Готово!"

End Sub

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

Уважаемые господа,
У меня очень часто может изменяться инфо из-за внесения корректировок. Есть годовой отчет компании в экселе (проводятся расчеты) и в ворде (описательная часть и таблицы). Таблиц много (около 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 2007 for
  • Макрос шаблон документа word
  • Макрос чтобы снять защиту excel
  • Макрос чтобы закрыть excel
  • Макрос часы в excel