Как vba осуществляется передача данных из excel в текстовый документ

Обновлено: 04.07.2024

EducatedFool, какие два файла? Планирую иметь один файл: Excel со стандартным скриптом под excel и скриптом, созданным в word через editor. Cкрипт, созданным в word через editor, работает локально отлично, но при переносе его в excel - excel выдает ошибки; например на такие строки, как: ".LeftIndent = CentimetersToPoints(0)" и перестает ругаться, но игнорирует строку после замены "=" на ".".
Простая вставка абзацев с вкладками не вызывает проблем, но хочеться выполнить word-макрос (написанный в word), который был бы интегрирован в excel со всеми вытекающими!
Пример:
1. Стандартная обработка в excel
2. Открытие новой книги Word
3. Заполнение листа Word:

(см. прикрепленный файл)

4. Вставка данных из Excel в Word (стандартным способом).

Интересует только проблемный п. 3

Спасибо за любую помощь.

Спасибо за ссылку. Но как я разобрался - в примере наличиствует явный перенос данных из excel в word. У меня - другая задача. Шерстю дальше форум с целью поиска ответа. Спасибо за ссылку. Но как я разобрался - в примере наличиствует явный перенос данных из excel в word. У меня - другая задача. Шерстю дальше форум с целью поиска ответа. Значит, не разобрался. В примере можно увидеть принцип работы с другим приложением. И совсем неважно, что ты будешь делать: использовать уже готовый документ или создавать новый и заполнять своими данными.
Не подумай, что я издеваюсь, но скрипт под Excel ты где взял? Если сам написал, то должен хотя бы приблизительно представлять, что для запуска скрипта для Word нужно, как минимум, иметь объект Word.
Вот тебе пример:
Последний раз редактировалось viter.alex; 28.02.2010 в 22:49 . Буду разбираться дальше .
Но чтобы сэкономить время всех я писал следующее:
".
2. Открытие новой книги Word
.
Интересует только проблемный п. 3"
С п. 2 я разобрался Последний раз редактировалось siimao; 28.02.2010 в 23:21 . Причина: добавлен файл с примером результата, который бы хотелось получить работой ОДНОГО Excel (Word как инструмент) Для передачи данных из Excel в Word при таком подходе удобно использовать коллекцию Variables.
Пример:

Матрицу так же можно передать по строкам или столбцам. Впрочем, поле INCLUDETEXT никто не отменял

В Word используйте функцию Split для разбора списковых параметров.
Доступ к переменной из VBA кода Word осуществляется по имени


Мы все сталкиваемся с такой ситуацией, когда нам приходилось помещать огромные данные в файлы Excel, но в конечном итоге мы столкнулись с ситуацией, когда размер этого файла с огромными данными увеличился настолько, что нам пришлось преобразовать их в текст. файл. Из-за этого мы не могли ни работать над этим файлом, ни сохранять файл в формате Excel. Такого рода ситуации мы наблюдали во многих проектах, где нам нужно извлечь данные из базы данных. Извлечение данных из базы данных возможно, если для этого использовать текстовый файл. Текстовый файл не зависает, и мы можем хранить как можно больше данных и таблиц в одном текстовом файле без сбоев файла. Для этого нам нужно преобразовать файл Excel в текстовый файл. Хотя это не большая задача, когда это повторяющееся действие и выполнение может занять огромное время.

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

Понимание кода написания текстового файла на VBA довольно сложно, но это не сложно понять.

  • File Path: путь к файлу, в котором мы сохранили файл Excel.
  • Режим: для каких целей нам нужно открыть файл. Это может быть режим только для чтения или цель записи, или нам нужно использовать его для добавления данных.
  • Номер файла: По этому мы можем подсчитать количество времени, которое мы использовали для файла Excel для текстового файла.

Как написать текстовый файл в Excel VBA?

Мы научимся писать текстовый файл с использованием кода VBA в Excel на нескольких примерах.

Вы можете скачать этот шаблон Excel для текстового файла VBA здесь - VBA Шаблон для текстового файла записи Excel

Пример № 1 - VBA запись текстового файла

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

Шаг 1: Перейдите к пункту меню « Вставка» и выберите « Модуль», как показано ниже.


Шаг 2: Теперь в открытом модуле напишите подкатегорию VBA Write Text или мы можем выбрать любое имя по нашему выбору.

Код:


Шаг 3: На первом этапе кодирования объявите переменную myFile как String, как показано ниже.

Код:


Шаг 4: В назначенной переменной укажите местоположение файла, который нам нужно конвертировать из Excel в текст. Здесь мы назвали этот файл как Test с расширением. TXT, как показано ниже.

Код:


Шаг 5: Как мы видели в описании VBA Write Text File, мы сначала откроем файл Excel, а затем добавим данные из Excel в текстовый файл с командной строкой ниже.

Код:


Код:


Шаг 7: Теперь закройте первую таблицу, как показано ниже.

Код:


Код:



Шаг 10: Теперь перейдите к месту, которое мы упомянули в коде выше, мы увидим текстовый файл с именем Test, как показано ниже.


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


Пример №2 - VBA запись текстового файла

Есть и другой путь к той же работе.

Шаг 1: В примере мы будем использовать тот же код, который мы написали выше, но в используемом коде будут небольшие изменения. Давайте рассмотрим тот же код, который показан в примере-1.

Код:


Шаг 2. Теперь вместо файла выберите активную книгу с ActiveWorkbook, как показано ниже.

Код:


Шаг 3: Теперь выберите Путь из выпадающего списка ActiveWorkBook .

Код:


Шаг 4: Затем выберите путь, куда мы должны добавить данные в текстовый файл, разделенные амперсандом.

Код:



Теперь снова перейдите по тому пути, где мы сохранили этот файл с кодом, и посмотрите, сохранен ли текстовый файл там или нет.


Теперь откройте файл, чтобы проверить, правильно ли добавлены данные или нет. Мы обнаружим, что данные добавляются аналогично тому, как это было в примере-1.


Плюсы Excel VBA Написать текстовый файл

  • Нам даже не нужно открывать какой-либо файл, чтобы добавить данные.
  • Если данные огромны, мы можем добавить данные из Excel в текст, не открывая файл. Таким образом, нет проблем с обработкой файла.
  • Если мы перейдем к процессу, описанному в примере 2, нам даже не нужно будет указывать путь, по которому мы хотим увидеть выходной текстовый файл.

То, что нужно запомнить

  • В процессе, показанном в примере 1, мы можем поместить файл в то место, где мы хотим увидеть вывод.
  • В процессе, показанном в примере 2, он автоматически рассмотрит расположение файла, в котором есть VBA-код VBA Write Text File.
  • Мы даже можем выбрать данные из любого файла Excel, который мы хотим преобразовать в текстовый файл.
  • Мы можем выбрать и создать любое число в виде таблицы, которую мы хотим добавить в текстовый файл.

Рекомендуемые статьи

Это руководство к текстовому файлу VBA. Здесь мы обсудим, как написать текстовый файл в Excel с использованием кода VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.
  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.
  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.

Функция EOF

Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.

Синтаксис функции EOF:

Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.

Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.

Примеры чтения и записи в файл

Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.

Open ThisWorkbook . Path & "\myFile1.txt" For Output As ff

Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.

Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.

Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.

Open ThisWorkbook . Path & "\myFile1.txt" For Input As ff 'Считываем строку из файла и записываем в переменные

Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.

Иногда бывает необходимо перенести что-то из Excel в другое приложение. Я возьму для примера Word. Например скопировать ячейки и вставить. Обычно мы это так и делаем - скопировали в Excel, открыли Word - вставили. Но сделать это при помощи кода чуть сложнее, хотя если разобраться никаких сложностей нет. Ниже приведен пример кода, который открывает Word, открывает в нем определенный документ, копирует данные из Excel и вставляет в открытый документ Word.

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Excel диапазон "A1:A10" Range("A1:A10").Copy 'вставляем скопированные ячейки в Word - в начала документа objWrdDoc.Range(0).Paste 'закрываем документ Word с сохранением objWrdDoc.Close True ' False - без сохранения 'закрываем приложение Word - обязательно! objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

Tips_Macro_OpenWord.xls (49,5 KiB, 5 645 скачиваний)


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

В принципе, активировать или вызвать(если закрыто) другое приложение Офиса можно одной строкой:

Sub Open_AnotherApp() Application.ActivateMicrosoftApp xlMicrosoftWord End Sub

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

По сути, методами CreateObject и GetObject можно обратиться к любому стороннему приложению(например Internet Explorer). Куда важнее при обращении к этим объектам знать объектную модель того приложения, к которому обращаетесь. Чтобы увидеть свойства и методы объектной модели приложения, можно в редакторе VBA подключить необходимую библиотеку, объявить переменную, назначив ей тип приложения. Покажу на примере того же Word-а.
Для начала открываем меню Tools - References :

Подключаем библиотеку:

Затем объявляем переменную и присваиваем ей тип нужного приложения:

Sub OpenWord() Dim objWrdApp As Word.Application Set objWrdApp = New Word.Application objWrdApp.Visible = True End Sub

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

Так же можно нажать F2 и через поиск найти Word и просмотреть все методы и свойства данного приложения.

Метод установки ссылки на библиотеку приложения через Tools-References называют еще ранним связыванием. Подобный метод позволяет создать ссылку на приложение быстрее и, как описано выше, предоставляет разработчику доступ к визуальному отображению свойств и методов объекта. Но есть существенный минус: если в своем коде Вы установите ссылку на Word 12 Object Libbary(Word 2007), то на ПК с установленным Word 2003 получите ошибку MISSING, т.к. Word 2003 относится к библиотеке Word 11 Object Libbary. Подробнее можно прочитать в статье Ошибка — Cant find project or library.
Метод же CreateObject еще называется методом позднего связывания. Применяя его не возникнет проблем с MISSING, очень часто возникающих при раннем связывании. Поэтому я рекомендовал бы при разработке использовать раннее связывание для удобства использования свойств и методов(если Вы их не знаете), а перед распространением приложения в коде заменить все именованные константы(типа wdLine) на числовые константы(для wdLine это 5) и применить позднее связывание. Посмотреть числовое значение константы можно просто записав её в коде, начать выполнение кода через F8 и навести курсор мыши на эту константу. Всплывающая подсказка покажет числовое значение. Так же можно отобразить окно Immediate(View -Immediate Window или сочетание клавиш Ctrl + G ), записать вопросительный знак и вставить эту константу и нажать Enter :
?wdLine
ниже будет выведено числовое представление этой константы.
А заменять эти константы их числовыми значениями в случае с поздним связыванием необходимо, т.к. Excel не знает их значений.
Попробую пояснить поподробнее про эти константы и почему их надо заменять какими-то числами: при подключении библиотеки Wordа(Word 12 Object Libbary) мы так же подключаем и все свойства, методы и константы, которые доступны из Wordа. И их использование напрямую становится доступно из Excel и мы можем смело написать что-то вроде wbLine и Excel поймет эту константу. При позднем же связывании мы уже не подключаем библиотеки Word(во избежание ошибок совместимости) и как следствие - методы, свойства и константы Wordа для Excel становятся чем-то неизвестным и не документированным и мы получим ошибку "Variable not defined"(если включена директива Option Explicit) при попытке назначить свойство через wdLine. Если же Option Explicit не включена - то хоть ошибки не будет, но и код будет работать неверно, т.к. для неизвестной для Excel переменной wbLine будет назначено значение 0(Empty). Поэтому и надо все константы другого приложения заменять их числовыми значениями.

Главная ошибка новичка
И хочу так же упомянуть про ошибку, которую очень часто совершают при обращении к одному приложению из другого. Допустим, необходимо скопировать из Word все данные в Excel. Часто начинающие делают это так:

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Word все данные, обращаясь к объекту Range документа Range.Copy 'вставляем скопированное в ячейку А1 активного листа Excel ActiveSheet.Paste 'закрываем документ Word без сохранения objWrdDoc.Close False 'закрываем приложение Word objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

На строке Range.Copy обязательно получите ошибку от VBA, указывающую, что нужен аргумент для объекта. Можно попробовать добавить этот аргумент: Range(1).Copy. Но все равно получим ошибку. Можно, конечно, указать даже ячейки: Range("A1").Copy. Но это приведет к тому, что скопирована будет ячейка А1 активного листа Excel.
Все дело в том, что мы хотим скопировать данные из Word-а, выполняя при этом код из Excel. А у Excel тоже есть объект Range с другими аргументами. И если не указать какому приложению, листу или документу принадлежит Range, то по умолчанию он будет отнесен к тому приложению, из которого выполняется код. Т.е. к Excel. Если совсем кратко об этом - всегда надо указывать какому приложению или объекту принадлежит используемый объект или свойство. Правильно код должен выглядеть так:

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Word все данные, обращаясь к объекту Range документа 'при этом перед Range явно указываем откуда его брать - из документа Word -objWrdDoc("C:\Doc1.doc") objWrdDoc.Range.Copy 'вставляем скопированное из Word в активную ячейку активного листа Excel ActiveSheet.Paste 'закрываем документ Word без сохранения objWrdDoc.Close False 'закрываем приложение Word objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

Вместо Range ту же ошибку делают и с Selection(потому что Selection часто присутствует в записанных макрорекордером макросах), т.к. этот объект есть и в Excel и в Word и без явного указания приложения будет относится к приложению, в котором записано.

Tips_Macro_OpenWord.xls (49,5 KiB, 5 645 скачиваний)

А в архиве ниже - практически готовое решение заполнения всевозможных бланков Word из Excel. Как это работает. У нас есть таблица Excel с данными для заполнения бланков заявлений на пособия:

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

Фигурные скобки сделаны для того, чтобы код 100% искал и заменял только метку в шаблоне, исключая при этом замену случайного текста вне скобок(ведь слово "Должность" может встречаться и само по себе).
А здесь я схематично привел то, как будут происходить замены:

Сначала программа создаст новую папку, в которую и будет сохранять создаваемые файлы(имя папки состоит из даты и времени запуска кода). Далее программа циклом пройдется по каждой строке таблицы, создаст на основании шаблона Word( "Шаблон.doc" ) новый файл для этой строки, заполнит этот шаблона данными на основании меток, и сохранит созданный файл под новым именем. Сам файл шаблона при этом не изменяется - все метки в нем сохраняются как были настроены до запуска кода. Конкретно в приложенном коде значение для имени нового файла берется из первого столбца "ФИО с инициалами". Но это можно изменить в коде при необходимости. Делается это в этой строке:

'считываем фамилию с инициалами sWDDocName = .Cells(lr, 1).Value

Что еще важно: файл шаблона Word должен находиться в той же папке, что и файл с кодом. Название файла в приложенном к статье файле должно быть "Шаблон.doc". Но его так же можно изменить, не забыв изменив его в коде в этой строке:

'имя шаблона Word с основным текстом и метками Const sWDTmpl As String = "Шаблон.doc"

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

Скопируйте и вставьте диапазон Excel в Word с VBA

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

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

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

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

Запись: Если вы не видите разработчик в меню 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 запущено, вы хотите сделать его видимым для пользователя и активировать его для использования.

Далее вы хотите создать новый документ в приложении 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 на вашем компьютере.

Читайте также: