Vba word вставить текст в таблицу

Обновлено: 04.07.2024

Есть два документа *.doc с созданными в них двумя таблицами.
Необходимо данные из ячейки одной таблицы переписать в другую, причем
в одну ячейку первой таблицы попадают значения из нескольких ячеек другой, разделенные пробелами.


Но в этом случае три значения выводятся не в одну строку, а в три, разделенные возвратом каретки.
Как склеить значения в одну строку?
Спасибо!

Здравствуйте, kas1830, Вы писали:

K>Но в этом случае три значения выводятся не в одну строку, а в три, разделенные возвратом каретки.
K>Как склеить значения в одну строку?
Очевидно, надо убрать возвраты каретки. :-)
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков

Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Очевидно, надо убрать возвраты каретки.

Спасибо. Но самое интересное в том, что необходимо вырезать не один последний символ, а два,
тогда склеивание строк в итоговой ячейке отрабатывается как надо. Дело в том, что в конце каждой ячейки присутствует
спецсимвол, который, вероятно, обозначает ее конец. Так что и его вырезать надо.

И еще один вопрос вдогонку:
два файла находятся в одной директории. Как мне в коде сослаться на второй документ (в этой же директории) без указания полного пути?
В одной из САПР VBA поддерживал следующий тип записи —

точка и слеш указывали на то, что файл находится в той же директории. В VBA для Word я не нашел такого.

И вот еще вопрос:
необходимо запустить процедуру из другого документа.
Пробую что-то типа


но не прокатывает. Процедура находится в ThisDocument. Как до нее достучаться?

Здравствуйте, kas1830, Вы писали:

K>два файла находятся в одной директории. Как мне в коде сослаться на второй документ (в этой же директории) без указания полного пути?
K>В одной из САПР VBA поддерживал следующий тип записи —

K>точка и слеш указывали на то, что файл находится в той же директории. В VBA для Word я не нашел такого.

Он и сейчас это поддерживает, потому что это свойство файловой системы. Также есть функция CurDir() (и обратная к ней ChDir()), которая может дать ответ, где ищется файл. К тому же, код выполняется в некоем окружении, в котором также есть пути, например, ActiveDocument.Path или thisDocument.Path, и можено самому формировать путь к документу ActiveDocument.Path & "\" & ".\имя файла".

Vita Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ

Здравствуйте, Vi2, Вы писали:

Vi2>Он и сейчас это поддерживает, потому что это свойство файловой системы. Также есть функция CurDir() (и обратная к ней ChDir()), которая может дать ответ, где ищется файл. К тому же, код выполняется в некоем окружении, в котором также есть пути, например, ActiveDocument.Path или thisDocument.Path, и можено самому формировать путь к документу ActiveDocument.Path & "\" & ".\имя файла".

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков Здравствуйте, Vi2, Вы писали:

Vi2>ActiveDocument.Path или thisDocument.Path,
Только не надо забывать, что это разные вещи! ActiveDocument это субстанция не постоянная, сделаешь Documents.Open и активным станет свежеоткрытый документ. А ThisDocument это ссылка на документ, в котором находится модуль макроса, т.е. если вызвать функцию из другого документа, то ThisDocument для этой функции уже будет свой.

Vi2>и можено самому формировать путь к документу ActiveDocument.Path & "\" & ".\имя файла".
ActiveDocument.Path & "\" & "имя файла"
:) Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков Здравствуйте, kas1830, Вы писали:

K>И вот еще вопрос:
K>необходимо запустить процедуру из другого документа.
K>Пробую что-то типа

K>
Читай внимательнее помощь:

MacroName Required String. The name of the macro. Can be any combination of template, module, and macro name. For example, the following statements are all valid.

Application.Run "Normal.Module1.MAIN"
Application.Run "MyProject.MyModule.MyProcedure"
Application.Run "'My Document.doc'!ThisModule.ThisProcedure"

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков Здравствуйте, ZAMUNDA, Вы писали:

ZAM>ActiveDocument.Path & "\" & "имя файла"
ZAM>
ActiveDocument.Path & "\" & "имя файла" & "\..\имя другого файла там же" Vita Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ

Коллеги, всем спасибо за дельные советы!

-214735573 (80020003)
Unable to run the specified macro

Что может быть? Процедуру сделал типа Public

Здравствуйте, kas1830, Вы писали:

K>-214735573 (80020003)
K>Unable to run the specified macro

Поторопился. Код ошибки 2147352573

Здравствуйте, kas1830, Вы писали:

K>-214735573 (80020003)
K>Unable to run the specified macro
Номер мне ничего не говорит. Есть вариант: проверь что в "Сервис->Макрос->Безопасность. ", возможно там макросы отключены. Если не сработает, то папку с обеими doc'ами в архив, на файл-шару и ссылку сюда. Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков

Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Номер мне ничего не говорит. Есть вариант: проверь что в "Сервис->Макрос->Безопасность. ", возможно там макросы отключены. Если не сработает, то папку с обеими doc'ами в архив, на файл-шару и ссылку сюда.

Косяк нашел сам! Причем чисто случайно. Look:
Вот, что я писал вначале

Очередной раз убеждаюсь, что всегда необходимо экспериментировать с кодом и не бояться делать лишних телодвижений))

Здравствуйте, kas1830, Вы писали:


"Documents(ThisDocument.Path & "\" & "filename.doc").Close" эквивалентно простому "oWord.Close".

Vita Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков

Коллеги, поглядите плз эту строчку:


че-то ругается на синтаксис. с апострофами тоже пробовал
Спасибо!

Здравствуйте, kas1830, Вы писали:

K>Коллеги, поглядите плз эту строчку:

K>
K>че-то ругается на синтаксис. с апострофами тоже пробовал
очевидно, т.е. видно по подсветке форума:
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков

Здравствуйте, ZAMUNDA, Вы писали:

ZAM>очевидно, т.е. видно по подсветке форума:
ZAM>

После того, как мы запустили приложение, нашли и активизировали нужный нам файл, следующее действие, которые выполняется чаще всего — ввод или редактирование текста в нужном месте. Для этого используются объекты Selection, Range и Bookmark. Каждое из них используется в своих ситуациях и для своих задач.

Первый объект, который мы рассмотрим — это объект Selection. Что это такое?

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

Создавать объект Selection и получать на него ссылку в переменную не обязательно (а обычно и просто невозможно). Дело в том, что объект Selection в документе может быть только один. Он создается автоматически при запуске Word и всегда доступен. Обращаться к нему можно так:

Application.Selection.Text = "Вставляемый текст"

Selection.Text = "Вставляемый текст"

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

Как настроить выделение в документе Word:

  • самый простой способ — просто положиться на выделение нужного текста пользователем. Обычно такой способ применяется для сложного редактирования/форматирования участков текста и для ввода информации в указанное пользователем место документа, когда в автоматическом режиме нужное место не найти;
  • воспользоваться методом Select(), который предусмотрен для огромного числа объектов (Document, Range, Bookmark, Table со всеми подобъектами типа столбцов и строк, PageNumber, Field и т.п.). Этот метод просто выделяет весь документ, закладку, таблицу и т.п.
  • воспользоваться многочисленными методами объекта Selection, чтобы преобразовать уже существующее выделение;
  • воспользоваться объектом Find для поиска нужного участка текста. Подробнее об этом объекте — в специальном разделе.
  • если вам нужно вводить информацию в самое начало документа, можно вообще ничего не делать. По умолчанию указатель вставки устанавливается на начало документа. Только не забудьте сделать этот документ активным.

Если вы полагаетесь на выделение нужного места пользователем, то помните, что пользователь может ухитриться выделить одновременно несмежные участки текста (при помощи клавиши <Ctrl>), или выделить не текст, а часть таблицы, рисунок или другой нестандартный объект в документе. Чаще всего поведение программы, работающей с объектом Selection, в этом случае становится совершенно непредсказуемым, поэтому рекомендуется всегда использовать дополнительные проверки при помощи свойств Type и Information объекта Selection.

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

Таблицы в VBA Word принадлежат коллекции Tables, которая предусмотрена для объектов Document, Selection и Range. Новая таблица создается с помощью метода Tables.Add.

Синтаксис метода Tables.Add

Expression . Add ( Range , Rows , Columns , DefaultTableBehavior , AutoFitBehavior )

Expression – выражение, возвращающее коллекцию Tables.

Параметры метода Tables.Add

  • Range – диапазон, в котором будет создана таблица (обязательный параметр).
  • Rows – количество строк в создаваемой таблице (обязательный параметр).
  • Columns – количество столбцов в создаваемой таблице (обязательный параметр).
  • DefaultTableBehavior – включает и отключает автоподбор ширины ячеек в соответствии с их содержимым (необязательный параметр).
  • AutoFitBehavior – определяет правила автоподбора размера таблицы в документе Word (необязательный параметр).

Создание таблицы в документе

Создание таблицы из 3 строк и 4 столбцов в документе myDocument без содержимого и присвоение ссылки на нее переменной myTable:

Set myTable = . Tables . Add ( . Range ( Start : = 0 , End : = 0 ) , 3 , 4 )

Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:

Set myTable = . Tables . Add ( . Range ( Start : = myInt , End : = myInt ) , 5 , 4 )

Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.

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

При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:

Нумерация индексов начинается с единицы.

Отображение границ таблицы

Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:

Вариант 1
Присвоение таблице стиля, отображающего все границы:

Вариант 2
Отображение внешних и внутренних границ в таблице:

Вариант 3
Отображение всех границ в таблице по отдельности:

Присвоение таблицам стилей

Вариант 1

Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.

Вариант 2

Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.

Обращение к ячейкам таблицы

Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:

Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:

В таблице myTable должно быть как минимум 2 строки и 3 столбца.

Примеры создания таблиц Word

Пример 1
Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:

myDocument As Word . Document , myTable As Word . Table

В выражении myDocument.Range(Start:=0, End:=0) ключевые слова Start и End можно не указывать – myDocument.Range(0, 0) .

Пример 2
Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:

. Range . InsertAfter "Продажи фруктов в 2019 году" & vbCr Set myTable = . Tables . Add ( . Range ( myInt , myInt ) , 4 , 4 )

Метод AutoSum суммирует значения в ячейках одного столбца над ячейкой с суммой. При использовании его для сложения значений ячеек в одной строке, результат может быть непредсказуемым.

Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:

Другие значения метода Formula, применяемые для суммирования значений ячеек:

  • «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
  • «=SUM(BELOW)» – сумма значений под ячейкой;
  • «=SUM(RIGHT)» – сумма значений справа от ячейки.
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

8 комментариев для “VBA Excel. Создание таблиц в документе Word”

Здравствуйте, Юрий!
Попробуйте так:

Макросы в Word работа с таблицами

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

Таким образом, в одном уроке и изучим всё что касается макросов в Word и таблиц. А также затронем тему автозаполнения Word документа.

Ну что же, приступим.

Макросы в Word. Работа с таблицами

Чтобы записать макрос в Microsoft Word 2007, или более поздних версиях этого приложения, необходимо конечно же запустить приложение Word и создать новый документ. Затем перейти на вкладку Вид и в группе Макросы, выбрать Запись макроса. Если вы все сделали правильно, то перед вами появится окно Запись макроса.

Запись макроса в Word

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

Алгоритм создания таблицы в Word (Запись макроса)

1. В поле имя введите МояПерваяТаблица и нажмите Ок. Рядом с указателем мыши появится изображение магнитофонной кассеты это свидетельствует о том, что запись макроса началась. Теперь всё что мы будем делать в Word будет записано и преобразовано в VBA код.

2. Перейдите на вкладку Вставка и в группе Таблица выберите Вставка таблицы. Создадим таблицу на 4 колонки и 4 строки.

Макросы в Word работа с таблицами

3. Теперь давайте заполним заголовки колонок, созданной нами таблицы. Первая колонка будет иметь заголовок «№ п/п», вторая – «ФИО», Третья – «Класс», а четвёртая «Группа». Очень важно, вводя эти заголовки использовать клавишу Tab для перехода на следующую ячейку иначе макрос будет записан некорректно.

Правильная последовательность ввода заголовков:

  • установите курсор на первой ячейке
  • установите шрифт «полужирный»
  • установите выравнивание «По центру»
  • введите текст «№ п/п»
  • нажмите клавишу Tab
  • установите шрифт «полужирный»
  • установите выравнивание «По центру»
  • введите текст «ФИО»
  • нажмите клавишу Tab
  • установите шрифт «полужирный»
  • установите выравнивание «По центру»
  • введите текст «Класс»
  • нажмите клавишу Tab
  • установите шрифт «полужирный»
  • установите выравнивание «По центру»
  • введите текст «Группа»
  • нажмите клавишу Tab
  • удерживая левую клавишу мыши потяните правую границу первой колонки влево, чтобы уменьшить её ширину

Всю эту последовательность я записал на видео. Поэтому не поленитесь и уделите 7 минут вашего времени, чтобы посмотреть этот видеоролик.

После того как мы сделали все вышеописанные манипуляции, необходимо вернуться на вкладку Вид – Макросы. И нажать «Остановить запись».

Запись макроса в Word

Вот и всё. Первый макрос записан. Теперь, каждый раз, когда нам нужно будет вставить таблицу с 4-мя колонками и 4-мя строками, достаточно будет перейти на вкладку Вид, выбрать группу Макросы, кликнуть Макросы, выбрать макрос «МояПерваяТаблица» и нажать Выполнить. Если вы всё сделали правильно, то там, где установлен курсив должна появиться таблица с заданными параметрами.

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