1

Тема: Таблици из разных листов книги Excel в документ Word

Добрый день, поиском пользовался, но подобного не нашел.

Суть проблемы: Есть файл Excel в котором на разных листах заполняются разные части отчета.
Допустим на первом листе "Шапка" отчета, на втором 1 таблица отчета, на третьем 2 таблица отчета.

Пытался записать макрос, которым бы "Шапка" отчета и 1 таблица отчета копировались на первый лист документа Word, а 2 таблица отчета на второй лист документа Word.

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

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

Как вставить остальное и разделить разрывом страницы таблицу 1 и 2 отчета ума не хватает.

Вот код, который состряпал:

Sub copy()
     'Поставить галку - Tools\References\Microsoft Word X.X Object Library
    
     Dim wdApp As New Word.Application 'экземпляр приложения
     Dim wdDoc As Word.Document 'экземпляр документа

     wdApp.Visible = True 'запускаем Microsoft Word
     Set wdDoc = wdApp.Documents.Add 'новый документ Microsoft Word
     wdDoc.PageSetup.Orientation = wdOrientPortrait 'ориентация страниц документа Microsoft Word
          
    Range("A1:C5").copy 'копируем "Шапку" отчета  в буфер
     Call wdDoc.Range.Paste 'вставляем из буфера
         
     'форматирование листа записанное макрорекодером
     With wdDoc.Paragraphs.Format
               .RightIndent = 0 'величина правого отступа абзаца в пунктах
               .SpaceBefore = 0 'величина отступа после абзаца (в пунктах)
               .SpaceBeforeAuto = False
               .SpaceAfter = 0 'величина отступа перед абзацем (в пунктах)
               .SpaceAfterAuto = False
               .LineSpacingRule = wdLineSpaceSingle 'величина межстрочного интервала (одинарный)
               .WidowControl = True
               .KeepWithNext = False
               .KeepTogether = False
               .PageBreakBefore = False
               .NoLineNumber = False
               .Hyphenation = True
               .FirstLineIndent = 0 'отступ первой строки в пунктах
               .OutlineLevel = wdOutlineLevelBodyText
               .CharacterUnitLeftIndent = 0
               .CharacterUnitRightIndent = 0
               .CharacterUnitFirstLineIndent = 0
               .LineUnitBefore = 0
               .LineUnitAfter = 0
               .MirrorIndents = False
               .TextboxTightWrap = wdTightNone
     End With
         
     ' форматирование вставленной таблици записанное макрорекодером
     With wdDoc.Tables(1)
        .AutoFitBehavior (wdAutoFitWindow) 'автоматический подбор ячеек
        .Rows.HeightRule = wdRowHeightAtLeast
        .Rows.Height = CentimetersToPoints(0.4) 'высота строки
        .Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 'выравнивание в ячейке
     End With

     Application.CutCopyMode = False 'очистить буфер обмена
     wdApp.Activate 'активируем окно Microsoft Word

End Sub

Пример прилагаю, буду признателен за помощь.

Post's attachments

Пример 03.07.13.rar 23.97 Кб, 6 скачиваний с 2013-07-03 

You don't have the permssions to download the attachments of this post.

2

Re: Таблици из разных листов книги Excel в документ Word

Такого рода задачи проще решаются заданием связи между документом и источником данных.
Скопируйте в екселе нужный диапазон ячеек с вашей таблицей.
В своем документе выберите место ввода, затем в меню "специальная вставка" выбираем радиокнопку "связать", а на вкладке "как" выбираем "формат html".
Таким же образом создаем связи с остальными таблицами.
Теперь изменения в исходном файле екселя будут автоматически отображаться в вашем документе. 
Режим изменения можно впоследствии настроить.

3

Re: Таблици из разных листов книги Excel в документ Word

ПОПРОБУЙТЕ ТАК

Sub copy130706()
'Поставить галку - Tools\References\Microsoft Word X.X Object Library

Dim wdApp As New Word.Application 'экземпляр приложения
Dim wdDoc As Word.Document 'экземпляр документа
Dim PR As Word.Paragraph
'wdApp.Visible = True 'запускаем Microsoft Word
Set wdDoc = wdApp.Documents.Add 'новый документ Microsoft Word
wdDoc.PageSetup.Orientation = wdOrientPortrait 'ориентация страниц документа Microsoft Word

Excel.Worksheets("ЛИСТ1").Activate
Range("A1:C40").copy 'копируем "Шапку" отчета  в буфер
Set PR = wdDoc.Paragraphs.Add
PR.Range.Text = "ТАБЛИЦА 1"
Set PR = wdDoc.Paragraphs.Add
Set PR = wdDoc.Paragraphs.Add
PR.Range.PasteExcelTable False, False, False
wdDoc.Paragraphs.Add

Excel.Worksheets("ЛИСТ2").Activate
Range("A1:D46").copy 'копируем "Шапку" отчета  в буфер
Set PR = wdDoc.Paragraphs.Add
PR.Range.Text = Chr(12) & "ТАБЛИЦА 2"
Set PR = wdDoc.Paragraphs.Add
Set PR = wdDoc.Paragraphs.Add
PR.Range.PasteExcelTable False, False, False
wdDoc.Paragraphs.Add

Excel.Worksheets("ЛИСТ3").Activate
Range("A1:E45").copy 'копируем "Шапку" отчета  в буфер
Set PR = wdDoc.Paragraphs.Add
PR.Range.Text = Chr(12) & "ТАБЛИЦА 3"
Set PR = wdDoc.Paragraphs.Add
Set PR = wdDoc.Paragraphs.Add
PR.Range.PasteExcelTable False, False, False 'вставляем из буфера
wdDoc.Paragraphs.Add

'форматирование листа записанное макрорекодером
With wdDoc.Paragraphs.Format
      .LeftIndent = 0
      .RightIndent = 0 'величина правого отступа абзаца в пунктах
      .SpaceBefore = 0 'величина отступа после абзаца (в пунктах)
      .SpaceBeforeAuto = False
      .SpaceAfter = 0 'величина отступа перед абзацем (в пунктах)
      .SpaceAfterAuto = False
      .LineSpacingRule = wdLineSpaceSingle 'величина межстрочного интервала (одинарный)
      .WidowControl = True

      .KeepWithNext = False
      .KeepTogether = False
      .PageBreakBefore = False
      .NoLineNumber = False
      .Hyphenation = True
      .FirstLineIndent = 0 'отступ первой строки в пунктах
      .OutlineLevel = wdOutlineLevelBodyText
      .CharacterUnitLeftIndent = 0
      .CharacterUnitRightIndent = 0
      .CharacterUnitFirstLineIndent = 0
      .LineUnitBefore = 0
      .LineUnitAfter = 0
      .MirrorIndents = False
      .TextboxTightWrap = wdTightNone
End With
With wdDoc.Range.Font
.Color = wdColorRed
.Size = 12
End With
' форматирование вставленной таблици записанное макрорекодером
With wdDoc.Tables(1)
.AutoFitBehavior (wdAutoFitWindow) 'автоматический подбор ячеек
.Rows.HeightRule = wdRowHeightAtLeast
.Rows(1).HeadingFormat = True
.Rows.Height = 10 * 72 / 25.4   ''10MM ДЛЯ ПРОВЕРКИ ПЕРЕНОСА ШАПКИ
'CentimetersToPoints(0.4) 'высота строки
.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 'выравнивание в ячейке
End With
With wdDoc.Tables(2)
.AutoFitBehavior (wdAutoFitWindow) 'автоматический подбор ячеек
.Rows.HeightRule = wdRowHeightAtLeast
.Rows(1).HeadingFormat = True
.Rows.Height = 10 * 72 / 25.4
'CentimetersToPoints(0.4) 'высота строки
.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 'выравнивание в ячейке
End With
With wdDoc.Tables(3)
.AutoFitBehavior (wdAutoFitWindow) 'автоматический подбор ячеек
.Rows.HeightRule = wdRowHeightAtLeast
.Rows(1).HeadingFormat = True
.Rows.Height = 10 * 72 / 25.4
'CentimetersToPoints(0.4) 'высота строки
.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter 'выравнивание в ячейке
End With
Application.CutCopyMode = False 'очистить буфер обмена
wdApp.Visible = True
wdApp.Activate 'активируем окно Microsoft Word

End Sub

4

Re: Таблици из разных листов книги Excel в документ Word

ДА, я добавила строк на лист, чтобы получить переход шапки

5

Re: Таблици из разных листов книги Excel в документ Word

Boris_R пишет:

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

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

6

Re: Таблици из разных листов книги Excel в документ Word

Boris_R, спасибо, я специальной вставкой пользоваться умею, но она не совсем подходит

shanemac51, спасибо за помощь, попытаюсь разобраться в Вашем варрианте

7

Re: Таблици из разных листов книги Excel в документ Word

ничего сложного нет
--добавила циклы для  таблиц
--разрыв страницы chr(12)
--может лишние параграфы и не нужны, но без них не работает
--цвет задала для индикации того, что можно при необходимости раскрасить(и размер)


-----------
вывод--можно сделать шаблоны листов
--согласовано/утверждаю
--подписи
.....
и компоновать как хочется