Перейти к содержимому
Промокод на фестиваль скидок GGsel
(Реклама. ООО "Ай Ти Инвест". Tax Number: 02405202310226)

VBA Excel. Копирование текста из Word в Excel

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

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

    Автоматическое копирование текста будет особенно полезным при необходимости регулярного переноса большого количества данных из документов Word в ячейки рабочих листов Excel. Такая работа в ручном режиме может занять не один час и гарантированно привести к ошибкам.

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

    Подключение библиотеки Microsoft Word

    По умолчанию Excel «не знает», что такое Word. Чтобы научить его работать с объектами Word, нам нужно подключить соответствующую библиотеку. Мы будем использовать «Раннее связывание» (Early Binding), так как оно удобнее для написания кода (подсказки IntelliSense работают сразу). Для «Позднего связывания» (Late Binding) библиотеку подключать не нужно.

    1. Откройте Excel и нажмите Alt + F11, чтобы открыть редактор VBA.
    2. В верхнем меню выберите Tools (Инструменты) -> References (Ссылки).
    3. В появившемся списке найдите и поставьте галочку напротив пункта Microsoft Word XX.0 Object Library (где XX — ваша версия Office, например, 16.0).
    4. Нажмите «OK».

    Копируем текст по абзацам в ячейки

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

    Процедуры для копирования текста из Word

    Вставьте следующий код в стандартный модуль (Insert -> Module):

    Пояснения по представленным процедурам

    Давайте посмотрим, как это работает:

    1. Set wdApp = New Word.Application — мы запускаем фоновый процесс Word. По умолчанию параметр Visible = False, что делает Word невидимым для пользователя (лишние окна не мелькают).
    2. wdDoc.Documents.Open — открываем конкретный файл по указанному пути.
    3. For Each wdPara In wdDoc.Paragraphs — это основа макроса. Мы не просто берем весь текст, а проходимся по каждому абзацу. Это позволяет контролировать структуру данных — каждый следующий абзац копируется в новую ячейку.
    4. CleanWordText — важный нюанс! В Word каждый абзац заканчивается скрытым символом переноса строки (Chr(13)). Если скопировать его в Excel «как есть», в ячейке появятся некрасивые квадратики или разрывы строк. Функция CleanWordText убирает этот мусор.
    5. wdApp.Quit и Set ... = Nothing — очень важный блок! Если вы не закроете Word и не очистите переменные, в диспетчере задач останутся «висеть» скрытые процессы WINWORD.EXE, которые будут съедать оперативную память.

    Копирование одного абзаца

    Здесь будем использовать «Позднее связывание» (Late Binding) и копировать из приложения Word в Excel текст только одного (двадцатого) абзаца. Полное имя файла Word и имя листа Excel замените на свои.

    Двадцатый абзац берём из следующего файла:

    Документ Word для копирования текста в Excel

    Код процедуры для копирования одного абзаца:

    Результат работы кода:

    Результат копирования текста из документа Word в ячейку Excel

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


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