Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Вставка таблицы 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 — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.

    Параметры

    Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.

    Параметр Описание
    LinkedToExcel True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word.
    False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается.
    WordFormatting True — вставленная таблица будет отформатирована как таблица документа Word.
    False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel.
    RTF True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF).
    False — Excel-таблица будет вставлена в формате HTML-таблицы.

    Пример вставки Excel-таблицы

    Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки "Закладка1".

    Решение:

    Если необходимо таблицу вставить в конец документа, строку

    следует заменить на


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    31 комментарий для “VBA Excel. Вставка таблицы Excel в документ Word”

    1. Алексей

      Здравствуйте, Евгений. Спасибо за статью. То, что надо. Только небольшую заметку надо по поводу подключения библиотеки (Tools -> References -> Microsoft Word xx.0 Object Library), а то будет появляться сообщение (User-defined type is not defined). И ещё я сделал для связи:

      подскажите как сделать во вставленной таблице все тексты и значения по центру (повторюсь, в таблице количество строк меняется, поэтому диапазон должен быть ко всей таблице)? Или лучше это сделать макрорекордером ворд?
      Тут же вопрос: можно ли обновить документ не открывая его? (я предполагаю уже макросами ворда надо пользоваться).

      1. Алексей

        Отвечу сам себе по поводу вставленной таблицы в ворде: принимает формат того абзаца на котором закладка. Шаблон ворда поправил теперь как надо встаёт таблица. Но есть «но». Дальнейшее не имеет отношения к эксель, но я опишу для информативности. Шаблон в Ворде у меня построен на Слиянии так же из другого документа Эксель в шаблон Ворд, а таблица которую вставляю из другого документа Эксель, так вот при вставке Нашей Таблицы в шаблоне Ворд «теряется» исходный документ Слияния. Наверно «действия» вставки таблицы форматирует ссылку на документ Слияния.

    2. Огромное спасибо за пример! То что нужно! Но столкнулся с проблемой, которую пока не могу решить: у меня в экселе несколько листов из которых нужно скопировать таблицы и вставить вместо соответствующих закладок в ворд. Так вот, после копирования первой таблицы и вставки ее на место первой закладки, программа по необъяснимой для меня причине вставляет скопированную таблицу вместо всех закладок. Названия закладок разные, но почему-то они заменяются все. Вот фрагмент кода:

      1. Евгений

        Добрый день, Максим!
        Попробуйте переопределить закладки. Выделите в документе текст закладки без пробела в конце и снова вставьте закладку с тем же именем. И так со всеми закладками.

    3. Здравствуйте!
      При использовании кода:

      почему-то не сохраняется форматирование таблицы как в Excel, при вставке таблицы «руками» через «Сохранить исходное форматирование» все копируется, как надо. Подскажите как поправить код?
      Как прикрепить скрин не знаю.

      1. Евгений

        Здравствуйте, Kirill!
        Попробуйте заменить последний параметр с False на True.

        1. Евгений, здравствуйте!
          Спасибо большое за подсказку!
          К сожалению не помогло(( Таблица вставляется «криво». Даже уже и не знаю как быть.

          1. Upd.
            Евгений, я был не прав! Помогло! Спасибо!

    4. Алексей

      Здравствуйте, Евгений. Как можно из разных документов эксель в один ворд вставлять таблицы по закладкам. По отдельности для каждого документа ваш код работает хорошо. Пробовал переделать код из урока «VBA Excel. Bookmarks – закладки в документе Word» 5-й части, не получилось. Посмотрел, что вам писал здесь «Максим от 14.04.2022 в 17:06» у меня похожая ситуация, но у меня разные файлы эксель и «Максим» выложил часть кода. Если сможете, помогите.

      1. Евгений

        Здравствуйте, Алексей!
        Примерный код будет таким:

        Код расположен в отдельной книге «Книга1.xlsm». Все книги должны быть открыты.

        1. Алексей

          Здравствуйте, Евгений. Это замечательно с разных книг вставить в один документ. А как начать работу с открытым документом ворд? У меня задача сделать мини отчёт в ворд: 1. Из 1-го файла эксель сделать 1-ую страницу в ворд и часть отчёта, файл эксель я закрываю (чтобы не путаться). 2. Из 2-го файла эксель сделать 2-ую часть отчёта в том же документе ворд. Первая часть задачи выполняется и остаётся открытым файл ворд. Вторую часть задачи не могу осилить.
          Ещё попробую перефразировать, из другого файла эксель макрос на вставку в уже открытый файл ворд.
          Думал через этот код выполнить :

          но здесь не проект.

          1. Евгений

            Добрый день, Алексей!
            Это проблема тоже решаема:

            Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке.

    5. Алексей

      Здравствуйте, Евгений. Спасибо! Соединил ваши макросы в один и получил то, что надо.

    6. Добрый день, Евгений!
      Не нашел соответствующую тему и поэтому напишу здесь.
      Подскажите пожалуйста, как из кода VBA Excel зайти в конструктор формул Word? Необходимо произвести несколько замен в формуле, которая создана конструктором в документе Word, но не получается.
      Метки в тексте код находит замечательно, а вот метки в формуле игнорирует.

      1. Евгений

        Добрый день, Kirill!
        Попробуйте в самом Word записать макрос по созданию и редактированию формул. Если не получится, то вряд ли это вообще возможно через VBA. Проверить не могу, так как в моей версии Word конструктор формул отсутствует.

    7. Здравствуйте. Евгений, наконец-то вас нашла. Мне понравился ваш макрос, сохранила себе, а вот ресурс забыла.
      Вы отвечали

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

      1. Евгений

        Добрый день, Ната!
        На какой строке кода у вас происходит ошибка?

        1. Вот спасибо, за вопрос. Сразу перечитала статьи и поняла, что инструменты (библиотеку) ворда не подключила. Подключила и опять ошибка: Microsoft excel ожидает пока другое приложение завершит действие ole, и так циклично пока не попытаешься открыть файл ворд. И выходит ошибка 4198. Я думаю ошибка с открытием ворда.

          1. Евгений

            Ната, попробуйте перезагрузить компьютер и запустить код только с открытием файла Word:

    8. Всё сделала как вы сказали, открылся файл ворд. В этот же макрос добавила строчку:

      и зависает долго около минуты работает и опять выдаёт: Microsoft excel ожидает пока другое приложение завершит действие ole.
      в Workbooks("Книга2.xlsm") я полностью прописываю путь к файлу так же:

      1. Евгений

        Ната, книги Excel для работы этого кода должны быть уже открыты и обращаться к ним нужно только по имени: Workbooks("Книга2.xlsm"). Если предполагается, что книга будет закрыта, ее нужно предварительно открыть.

        1. Спасибо вам за разъяснения, поняла и многое не прочитала. Работает макрос только с открытым листом. А я хотела чтобы макрос с разных страниц-листов собирал таблички, у меня их три. Можно такое организовать? А выполнение макроса запускала с четвёртой. Простите, что доставила вам столько неудобств.

        2. Здравствуйте, Евгений. Извините за назойливость. Подскажите, решение по этому макросу сложное? У вас в статьях я нашла «Вызов подпрограмм с аргументами в пределах одного модуля»:

          я в правильном направлении двигаюсь?

          1. Евгений

            Добрый день, Ната!
            А по какой причине вам не подходит код, который вы разместили в первом комментарии?

    9. Евгений, спасибо Вам огромное за помощь!!! Дошло до меня :)))) Нашла свои ошибки.

    10. Здравствуйте Евгений!
      Подскажите пожалуйста как скопировать данные из excel в word с последовательным добавлением строк в word не применяя закладки (количество строк в Excel все время разное)?

    11. Николай

      Добрыый день, Евгений!
      Прошу помощи ибо не ведаю что творю 🙂

      нужно скопировать диапазон из таблицы Excel в диапазон таблицы в Word
      только ни как не пойму как заставить его принимать

      Set WA = GetObject(, "Word.Application") ' -- Запускаем Word
      If WA Is Nothing Then Set WA = CreateObject("Word.Application")
      WA.Visible = True
      WA.ScreenUpdating = True
      Set WD = WA.Documents.Open(Filename:=TemplAd) ' -- Открываем шаблон спецификации
      ActiveWorkbook.Sheets("Лист1").Range("A2:H3").Copy
      WD.Tables(1).Cell(WdRow, 3).Range.Select
      WD.Selection.Paste

    12. Здравствуйте.
      Вставил таблицу на n строк. Заполняю. Но таблица заканчивается.
      Как узнать что больше нет пустых строк и как добавить новые пустые строки ?
      Спасибо

    Обсуждение закрыто.