Создание таблиц в документе Word из кода VBA Excel. Метод Tables.Add, его синтаксис и параметры. Объекты Table, Column, Row, Cell. Границы таблиц и стили.
Работа с Word из кода VBA Excel
Часть 4. Создание таблиц в документе Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Таблицы в 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:
With myDocument Set myTable = .Tables.Add(.Range(Start:=0, End:=0), 3, 4) End With |
Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:
With myDocument myInt = .Range.Characters.Count — 1 Set myTable = .Tables.Add(.Range(Start:=myInt, End:=myInt), 5, 4) End With |
Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.
Последний знак завершения абзаца всегда присутствует в документе Word, в том числе и в новом без содержимого, поэтому такой код подойдет и для пустого документа.
При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:
myDocument.Tables(индекс) |
Нумерация индексов начинается с единицы.
Отображение границ таблицы
Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:
Вариант 1
Присвоение таблице стиля, отображающего все границы:
myTable.Style = «Сетка таблицы» |
Вариант 2
Отображение внешних и внутренних границ в таблице:
With myTable .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleSingle End With |
Вариант 3
Отображение всех границ в таблице по отдельности:
With myTable .Borders(wdBorderHorizontal) = True .Borders(wdBorderVertical) = True .Borders(wdBorderTop) = True .Borders(wdBorderLeft) = True .Borders(wdBorderRight) = True .Borders(wdBorderBottom) = True End With |
Присвоение таблицам стилей
Вариант 1
myTable.Style = «Таблица простая 5» |
Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.
Вариант 2
myTable.AutoFormat wdTableFormatClassic1 |
Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.
Обращение к ячейкам таблицы
Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:
myTable2.Cell(nRow, nColumn) myDocument.Tables(2).Cell(nRow, nColumn) |
- nRow – номер строки;
- nColumn – номер столбца.
Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:
myTable.Rows(2).Cells(2).Range = _ «Содержимое ячейки во 2 строке 2 столбца» myTable.Columns(3).Cells(1).Range = _ «Содержимое ячейки в 1 строке 3 столбца» |
В таблице myTable должно быть как минимум 2 строки и 3 столбца.
Примеры создания таблиц Word
Пример 1
Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:
Sub Primer1() Dim myWord As New Word.Application, _ myDocument As Word.Document, myTable As Word.Table Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument Set myTable = .Tables.Add(.Range(0, 0), 5, 4) End With With myTable .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleDot End With End Sub |
В выражении myDocument.Range(Start:=0, End:=0)
ключевые слова Start и End можно не указывать – myDocument.Range(0, 0)
.
Пример 2
Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
Sub Primer2() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document, _ myTable As Word.Table, myInt As Integer Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument ‘Вставляем заголовок таблицы .Range.InsertAfter «Продажи фруктов в 2019 году» & vbCr myInt = .Range.Characters.Count — 1 ‘Присваиваем заголовку стиль .Range(0, myInt).Style = «Заголовок 1» ‘Создаем таблицу Set myTable = .Tables.Add(.Range(myInt, myInt), 4, 4) End With With myTable ‘Отображаем сетку таблицы .Borders.OutsideLineStyle = wdLineStyleSingle .Borders.InsideLineStyle = wdLineStyleSingle ‘Форматируем первую и четвертую строки .Rows(1).Range.Bold = True .Rows(4).Range.Bold = True ‘Заполняем первый столбец .Columns(1).Cells(1).Range = «Наименование» .Columns(1).Cells(2).Range = «1 квартал» .Columns(1).Cells(3).Range = «2 квартал» .Columns(1).Cells(4).Range = «Итого» ‘Заполняем второй столбец .Columns(2).Cells(1).Range = «Бананы» .Columns(2).Cells(2).Range = «550» .Columns(2).Cells(3).Range = «490» .Columns(2).Cells(4).AutoSum ‘Заполняем третий столбец .Columns(3).Cells(1).Range = «Лимоны» .Columns(3).Cells(2).Range = «280» .Columns(3).Cells(3).Range = «310» .Columns(3).Cells(4).AutoSum ‘Заполняем четвертый столбец .Columns(4).Cells(1).Range = «Яблоки» .Columns(4).Cells(2).Range = «630» .Columns(4).Cells(3).Range = «620» .Columns(4).Cells(4).AutoSum End With ‘Освобождаем переменные Set myDocument = Nothing Set myWord = Nothing ‘Завершаем процедуру Exit Sub ‘Обработка ошибок Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Метод AutoSum суммирует значения в ячейках одного столбца над ячейкой с суммой. При использовании его для сложения значений ячеек в одной строке, результат может быть непредсказуемым.
Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:
myTable.Cell(2, 4).Formula («=SUM(LEFT)») |
Другие значения метода Formula, применяемые для суммирования значений ячеек:
- «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
- «=SUM(BELOW)» – сумма значений под ячейкой;
- «=SUM(RIGHT)» – сумма значений справа от ячейки.
Silvermatic 3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
||||
1 |
||||
09.03.2014, 19:01. Показов 20920. Ответов 16 Метки нет (Все метки)
Уже третий день не могу вникнуть в VBA в Word при работе с таблицами. Контрольная подвисла, время начинает поджимать, но нужно разобраться, а не банально копипастом все делать. Задание вкратце: Что сделано на данный момент:
В данном примере выделаю 1 столбец и запускаю макрос. Проблема в том, что sum = 0 и cnt = 0 тоже. Прошу вашей помощи.
0 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
09.03.2014, 19:26 |
2 |
Проблема в том, что sum = 0 и cnt = 0 тоже Текст ячейки всегда содержит в конце 2 символа chr(13)+chr(7), поэтому IsNumeric(yyy.Range.Text) всегда False.
могу предположить, что макрос перебирает все ячейки таблицы Чтобы не гадать, поставьте в цикл yyy.select и пройдите по шагам — F8.
0 |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||
09.03.2014, 20:58 |
3 |
|||
Сообщение было отмечено как решение РешениеПоэкспериментировав в окне Immediate, пока сделал такой вот набросок:
Миниатюры
1 |
Silvermatic 3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
||||
09.03.2014, 21:06 [ТС] |
4 |
|||
Текст ячейки всегда содержит в конце 2 символа chr(13)+chr(7), поэтому IsNumeric(yyy.Range.Text) всегда False. yyy.Range.Text преобразовать и перенести в массив чаров, определить длину и затереть 2 последних символа?
Чтобы не гадать, поставьте в цикл yyy.select и пройдите по шагам — F8. Как и подозревал, проходит по всей таблице…
Со строками все определялось нормально, а со столбцами не проходило — значения были от 1(cb) до 10(ce), т.е. прорабатывали все столбцы таблицы, а не те что были выделены.
0 |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||
09.03.2014, 21:12 |
5 |
|||
Вот наиболее близкий к заданию код. По крайней мере — по координатам выделения.
Поле {=sum(above)}*, конечно, суммирует всё, что сверху — ну это так, просто демо.
2 |
Silvermatic 3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
||||
09.03.2014, 21:19 [ТС] |
6 |
|||
Вот наиболее близкий к заданию код. По крайней мере — по координатам выделения. Я уже опробовал ваш код. Вопрос по вставке строки под выделенной областью. Такой вариант чем-нибудь плох?
Он нормально работает, но вдруг есть тонкости…
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||
09.03.2014, 21:37 |
7 |
|||||||
Мой вариант
Добавлено через 8 минут
2 |
3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
|
09.03.2014, 21:43 [ТС] |
8 |
Казанский, твой вариант «прожует» ячейки в которых содержится текст или пустые ячейки? По большому счету осталось определить что в ячейке находится именно число, а не что-либо другое.
0 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
09.03.2014, 21:49 |
9 |
Silvermatic, попробуй!
1 |
3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
|
09.03.2014, 23:53 [ТС] |
10 |
Казанский, хоть и не совсем то, что нужно, но в таком виде будет достаточно съедобно, ибо лекций VBA не прочитали и 40%.
0 |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||
10.03.2014, 00:11 |
11 |
|||
Добил-таки свой эксселеподобный (с формулами) вариант. Разделитель дробей запятая. Действует лишь на 1-ю таблицу в документе.
Миниатюры
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
10.03.2014, 00:13 |
12 |
|||
А, там же среднее надо было. Тогда так
1 |
3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
|
10.03.2014, 11:04 [ТС] |
13 |
Спасибо за помощь, ребята. В коде разобрался, сделал на свой манер, все работает. п.с. Сдать и забыть как страшный сон…
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
10.03.2014, 15:16 |
14 |
Можно ж было и удовольствие получить от постижения… А любопытно было бы взглянуть, каков он ваш манер!
0 |
Silvermatic 3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
||||||||
10.03.2014, 16:16 [ТС] |
15 |
|||||||
Можно ж было и удовольствие получить от постижения… Взглянув на количество объектов, их методов, свойств и параметров, на их замудреную иерархию…
А любопытно было бы взглянуть, каков он ваш манер! Почему же и не показать? Смотрите…
Ах, да, вот еще хотел уточнить что объявляется в этой строке? В смысле ни что объявляется, а что за объявление «ct$»?
И как вычеркнуть из этого объявления переменную cl. ct$, как я понял, что-то вроде указателя в Си?
1 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
10.03.2014, 18:28 |
16 |
Dim ct$ это сокращенная запись Dim ct As String.
0 |
3 / 3 / 0 Регистрация: 27.02.2014 Сообщений: 36 |
|
10.03.2014, 19:38 [ТС] |
17 |
Dim ct$ это сокращенная запись Dim ct As String. Значит примерно правильно понял. Спасибо за объяснения.
0 |
Приходилось ли вам выполнять при форматировании документа несколько раз повторять одни и те же команды? Предположим, в документе 50 таблиц. И каждую надо привести в порядок. Повторяющиеся заголовки, выравнивание назначить, да мало ли чего ещё сделать. И вот раз за разом повторяются одни те же команды. Так что знакомимся с понятием МАКРОС В ТАБЛИЦЕ.
В офисных программах есть замечательная возможность: объединить несколько команд в одну макрокоманду. Макрокоманда – это последовательность команд, которые будут работать автоматически при запуске макроса.
Вот определение, которое я взяла с любимого ресурса https://dic.academic.ru/dic.nsf/ruwiki/15081:
В «офисных» продуктах (OpenOffice.org, Microsoft Office и др.), в графических программах (например, CorelDRAW) при обработке макроса автоматически выполняется заданная для каждого макроса последовательность действий — нажатия на клавиши, выбор пунктов меню и т. д.
Я приложила к уроку документ с несколькими таблицами (скачать файл тут). Я удалила текст документа (всё-таки авторское право и всё такое…):
По окончании урока вы сможете:
- Составить алгоритм форматирования таблицы
- Настроить ленту «Разработчик»
- Записать макрос форматирования таблицы
- Проверить макрос в действии
- Добавить кнопку «Макрос» на панель быстрого доступа
1. Алгоритм форматирования
таблицы
Прежде, чем приступить к созданию макроса, следует тщательно продумать, какие команды нам понадобятся. Начнём с верха таблицы
- Заголовок, повторяющийся при переходе таблицы на следующую страницу
- Выравнивание содержимого ячеек заголовков по центру и по середине
- Заливка строки заголовка цветом
- Текст заголовка таблицы полужирного начертания красного цвета
- Поля ячеек – 0,05
- Видимые границы для всей таблицы красного цвета
- Автоподбор по ширине окна (вдруг таблица меньше ширины печатного поля)
Почему такая последовательность? При написании макрокоманды есть одна особенность:
Понять и запомнить! |
Ни в коем случае нельзя щелкать ЛМ по области документа! Работать только с лентами! |
Так вот, после выделения заголовка можно выделить всю таблицу командой с ленты, а наоборот – нельзя!
Итак, нам надо записать семь команд одной макрокомандой. По ходу дела команд может оказаться больше.
Для того, чтобы записать макрос, необходимо найти эту команду. Команда «Запись макроса» находится на ленте «Разработчик», которая в настоящий момент не видна.
2. Настройка ленты
«Разработчик»
Шаг 1. Выходим в режим настраивания ленты (ПМ в любом месте любой ленты → команда Настроить ленту из контекстного меню):
Шаг 1. Отметим галочкой ленту «Разработчик»[1]
ОК!
Вообще-то команда «Запись
макроса» есть на ленте «Вид»:
Но на ленте «Разработчик» есть много других команд, которыми я активно пользуюсь, например, создание форм и полей, поэтому эта лента присутствует у меня в обязательном порядке.
3. Макрос для таблицы. Запись макроса для форматирования таблицы
Шаг 1. Выделяем заголовок таблицы (щелкаем ЛМ
на полосе выделения напротив заголовка таблицы):
Шаг 2. Запускаем запись макроса (лента
Разработчик → группа команд Код → команда Запись макроса):
- Можно ввести имя макроса, но имейте в виду, что пробелы недопустимы, то
есть имя макроса будет выглядеть так – «Форматирование таблицы».
- Назначить выполнение макроса от нажатия единственной кнопке. Но кнопка должна быть уникальная (никогда не пользуюсь).
- Ввести описание макроса. Здесь никаких ограничений. Конечно, если макрос единственный, то можно и обойтись без описания. Я часто использую макросы, поэтому без описания просто не обойтись.
- Назначить выполнение макроса от нажатия сочетания функциональной клавиши плюс любой клавиши. Но при этом недопустимо использовать устойчивые системные сочетания, например, Ctrl+X, так как это сочетание зарезервировано для команды «Вырезать в буфер обмена».
- Из этого выпадающего меню выбираем доступность макроса для определенного документа. Если выбираем Normal.dotm, то наш макрос будет доступен для всех документов, созданных на основе шаблона Normal.dotm. Если мы создали документ на основе другого пользовательского шаблона, то в списке появится имя этого пользовательского шаблона, и тогда все документы на основе этого шаблона будут иметь внедрённый макрос. Но это действительно только для шаблонов, которые имеются на нашем компьютере.
Шаг 3. Назначаем сочетание клавиш (например,
Ctrl+1):
Нажимаем клавиши «Назначить» и «Закрыть» и знакомимся с новым видом курсора:
Шаг 4. Назначаем режим «Повторить строки
заголовков» (лента Макет → группа команд Данные → команда Повторить строки
заголовков):
Шаг 5. Назначаем выравнивание содержимого
ячеек строки заголовков по центру (лента Макет → группа команд Выравнивание → команда
Выровнять по центру):
Шаг 6. Назначаем заливку строки заголовка
(лента Конструктор → группа команд Стили таблиц → команда Заливка → выбор цвета
заливки из палитры):
Шаг 7. Устанавливаем полужирное начертание шрифта
заголовка и назначаем ему красный цвет (лента Главная → группа команд Шрифт → кнопка
«Ж» и кнопка Цвет текста → выбор цвета из палитры):
Шаг 8. Выделяем всю таблицу лента Макет → группа
команд Таблица → команда Выделить → команда Выделить таблицу из выпадающего
меню):
Шаг 9. Назначаем границы таблицы (лента
Конструктор → группа команд Обрамление → команда Цвет пера → выбор цвета
границы из палитры → команда Граница → команда Все границы из выпадающего
меню):
Шаг 10. Назначаем поля ячеек (лента Макет → группа команд Выравнивание → команда Поля ячейки → диалоговое окно Параметры таблицы[2] → Поля ячеек пользовательские):
Шаг 11. Устанавливаем Автоподбор таблицы по ширине окна (лента Макет → группа команд Размер ячейки → команда Автоподбор по ширине окна[3] из выпадающего меню):
Шаг 12. Останавливаем запись макроса (лента
Разработчик → группа команд Код → команда Остановить запись):
Команда «Остановить запись» дублируется скромным квадратиком на строке состояния:
Всё! Макрос для таблицы готов!
4. Проверка макроса в действии
Шаг 1. Выделяем заголовок любой таблицы:
Шаг 2. Нажимаем сочетание клавиш Ctrl+1 и любуемся результатом:
А теперь посмотрим,
как будет работать макрос на таблице со сложным заголовком. В учебном файле это
Таблица 4.
Шаг 1. Выделяем сложный заголовок, то есть
заголовок, состоящий из двух строчек и объединённых ячеек:
Шаг 2. Нажимаем сочетание клавиш Ctrl+1 и любуемся результатом:
И под занавес.
5. Кнопка запуска макроса «Форматирование_таблицы» на Панели быстрого доступа
Шаг 1. Вызываем диалоговое окно «Параметры Word» (Панель быстрого доступа → команда Другие команды из выпадающего меню):
Как настраивать Панель быстрого доступа я рассказывала в Уроке 18 и Уроке 19.
Шаг 2. Выбираем список «Макрос» (кнопка выпадающего
меню → список Макрос):
Шаг 3. Добавляем макрос для таблицы на Панель быстрого доступа (пока макрос один, но у нас всё впереди):
ОК! А вот результат:
Макрос для таблицы будет запускаться при нажатии кнопки на Панели быстрого доступа.
Теперь вы сможете:
- Составить алгоритм форматирования таблицы
- Настроить ленту «Разработчик»
- Записать макрос форматирования таблицы
- Проверить макрос в действии
- Добавить кнопку «Макрос» на панель быстрого доступа
[1]
В контекстном меню – «Настройка ленты», а в окне «Параметры Word» – «Вкладка»
[2] Интересно, почему команда «Поля ячейки», а диалоговое окно называется «Параметры таблицы»? Загадка природы, небрежность переводчиков или шутка разработчиков?
[3]
Вообще-то команда имеет смысл «Автоподбор по ширине печатного поля», но не
будем придираться.
Add Table to Word Document
This simple macro will add a table to your Word document:
Sub VerySimpleTableAdd()
Dim oTable As Table
Set oTable = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=3, NumColumns:=3)
End Sub
Select Table in Word
This macro will select the first table in the active Word document:
Sub SelectTable()
'selects first table in active doc
If ActiveDocument.Tables.Count > 0 Then 'to avoid errors we check if any table exists in active doc
ActiveDocument.Tables(1).Select
End If
End Sub
Loop Through all Cells in a Table
This VBA macro will loop through all cells in a table, writing the cell count to the cell:
Sub TableCycling()
' loop through all cells in table
Dim nCounter As Long ' this will be writen in all table cells
Dim oTable As Table
Dim oRow As Row
Dim oCell As Cell
ActiveDocument.Range.InsertParagraphAfter 'just makes new para athe end of doc, Table will be created here
Set oTable = ActiveDocument.Tables.Add(Range:=ActiveDocument.Paragraphs.Last.Range, NumRows:=3, NumColumns:=3) 'create table and asign it to variable
For Each oRow In oTable.Rows ' outher loop goes through rows
For Each oCell In oRow.Cells 'inner loop goes
nCounter = nCounter + 1 'increases the counter
oCell.Range.Text = nCounter 'writes counter to the cell
Next oCell
Next oRow
'display result from cell from second column in second row
Dim strTemp As String
strTemp = oTable.Cell(2, 2).Range.Text
MsgBox strTemp
End Sub
Create Word Table From Excel File
This VBA example will make a table from an Excel file:
Sub MakeTablefromExcelFile()
'advanced
Dim oExcelApp, oExcelWorkbook, oExcelWorksheet, oExcelRange
Dim nNumOfRows As Long
Dim nNumOfCols As Long
Dim strFile As String
Dim oTable As Table 'word table
Dim oRow As Row 'word row
Dim oCell As Cell 'word table cell
Dim x As Long, y As Long 'counter for loops
strFile = "c:UsersNenadDesktopBookSample.xlsx" 'change to actual path
Set oExcelApp = CreateObject("Excel.Application")
oExcelApp.Visible = True
Set oExcelWorkbook = oExcelApp.Workbooks.Open(strFile) 'open workbook and asign it to variable
Set oExcelWorksheet = oExcelWorkbook.Worksheets(1) 'asign first worksheet to variable
Set oExcelRange = oExcelWorksheet.Range("A1:C8")
nNumOfRows = oExcelRange.Rows.Count
nNumOfCols = oExcelRange.Columns.Count
ActiveDocument.Range.InsertParagraphAfter 'just makes new para athe end of doc, Table will be created here
Set oTable = ActiveDocument.Tables.Add(Range:=ActiveDocument.Paragraphs.Last.Range, NumRows:=nNumOfRows, NumColumns:=nNumOfCols) 'create table and asign it to variable
'***real deal, table gets filled here
For x = 1 To nNumOfRows
For y = 1 To nNumOfCols
oTable.Cell(x, y).Range.Text = oExcelRange.Cells(x, y).Value
Next y
Next x
'***
oExcelWorkbook.Close False
oExcelApp.Quit
With oTable.Rows(1).Range 'we can now apply some beautiness to our table :)
.Shading.Texture = wdTextureNone
.Shading.ForegroundPatternColor = wdColorAutomatic
.Shading.BackgroundPatternColor = wdColorYellow
End With
End Sub
I’m trying to learn how to handle Range objects in Word VBA with regards to MS Word tables.
Using the Range object help, it would seem I can create a range of cells as long as the cells are contiguous, however I cannot seem to get the syntax for specifying the Start and End points of the range using cells.
For example:
Set rngCells = myTable.Range(Start:=<cell>, End:=<cell>)
I’m not sure what to put in for to indicate the cell to start or the cell to end with. Can someone give me a clue?
Edit: I’ve already created the table from scratch — I’m trying to use a range of cells for some of the rows in the middle to apply formatting to them. In particular, I’m trying to see if this can be done without using Selection.
asked Sep 25, 2009 at 17:14
2
I found the answer I was looking for:
Set myCells = ActiveDocument.Range(Start:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start, _
End:=ActiveDocument.Tables(1).Cell(1, 1).Range.End)
I did not realize the Range object was from the Document object, not the Table object.
MikeD
8,8612 gold badges28 silver badges50 bronze badges
answered Sep 29, 2009 at 19:49
romandasromandas
4,0467 gold badges29 silver badges33 bronze badges
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 7 ]
1 07.02.2014 18:13:48
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Тема: Особенности таблицы Word и ее связь с кодом VBA
Здесь я рассказываю об особенностях таблицы Word, как объекта VBA.
1-я особенность: Многие пользователи часто сравнивают таблицу Word с таблицей Excel. Отчасти это верно, и там, и там у них общие основные свойства. Общая схема обеих таблиц в порядке подчинения выглядит так:
Таблица —> Строка (Столбец) —> Ячейка
Дальше начинаются разногласия, в основном из-за разного свойства Range (Область) в объектных моделей программ.
1. В Excel в объект Range может входить набор ячеек, которые не соседствуют между собой, как по горизонтали, так и по вертикали. А в Word это непрерывный поток данных.
Например, условновно мы имеем таблицу, состоящую из 1 строки и 3 столбцов (A1, B1, C1), то при выделении ячеек A1 и C1, Excel включит в объект Range 2-е ячейки A1 и C1, а Word — только A1, т.к. между ними есть разрыв ячека B1.
2. В Excel и в Word есть понятие Cell (Ячейка) и Cells (Ячейки).
В Word Cell и Cells представляются одноименными классами с отдельными свойствами и методами, а в Excel они представлены объектом Range, что дает намного больше преймуществ.
3. Разница получения данных из ячеек.
-
В Excel мы обращаемся к одному свойству Value и получаем чистый результат. Например, если в ячейке стоит 2, то для дальнейшего использования мы имеем [переменную] = 2, как число, если ячейка имеет общий или числовой формат.
-
В Word таже ячейка (как и любая ячейка Word) представляет собой текстовую строку с двумя лишними знаками «¶» и «¤»
Пишите мне в эту тему с отдельными вопросами связанными с данной темой. Постепенно буду здесь расмещать более развернутые вопросы.
2 Ответ от Зульфия 14.12.2016 18:11:37
- Зульфия
- рядовой
- Неактивен
- Зарегистрирован: 14.12.2016
- Сообщений: 2
Re: Особенности таблицы Word и ее связь с кодом VBA
Добрый день! Буквально два дня изучаю макросы и пытаюсь создать макрос для таблиц. Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.
3 Ответ от Зульфия 14.12.2016 19:12:10
- Зульфия
- рядовой
- Неактивен
- Зарегистрирован: 14.12.2016
- Сообщений: 2
Re: Особенности таблицы Word и ее связь с кодом VBA
Зульфия пишет:
Добрый день! Буквально два дня изучаю макросы и пытаюсь создать макрос для таблиц. Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.
Уточнение, работа идет с Word.
4 Ответ от Boris_R 21.12.2016 09:44:08
- Boris_R
- полковник
- Неактивен
- Зарегистрирован: 07.08.2012
- Сообщений: 234
- Поблагодарили: 110
Re: Особенности таблицы Word и ее связь с кодом VBA
Зульфия пишет:
Зульфия пишет:
Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.
Уточнение, работа идет с Word.
По последнему пункту — смотрите в Справке свойства и методы объектов CaptionLabel и CaptionLabels.
5 Ответ от Fck_This 28.12.2016 16:33:24
- Fck_This
- генерал-полковник
- Неактивен
- Откуда: Минск, Беларусь
- Зарегистрирован: 13.07.2016
- Сообщений: 648
- Поблагодарили: 97
Re: Особенности таблицы Word и ее связь с кодом VBA
Буду признателен, если поделитесь своими знаниями в отношении объединённых ячеек таблицы по вертикали и горизонтали.
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871
6 Ответ от aequit 02.03.2017 15:54:30
- aequit
- сержант
- Неактивен
- Зарегистрирован: 31.03.2015
- Сообщений: 13
Re: Особенности таблицы Word и ее связь с кодом VBA
Здравствуйте!
Подскажите, можно ли занести значение в ячейку таблицы Word одной командой, вместо двух:
ActiveDocument.Tables(1).Cell(1, 2).Select
Selection.TypeText
7 Ответ от yshindin 02.03.2017 16:10:10
- yshindin
- генерал-полковник
- Неактивен
- Откуда: Москва
- Зарегистрирован: 12.05.2012
- Сообщений: 447
- Поблагодарили: 171
- За сообщение: 1
Re: Особенности таблицы Word и ее связь с кодом VBA
aequit пишет:
Здравствуйте!
Подскажите, можно ли занести значение в ячейку таблицы Word одной командой, вместо двух:ActiveDocument.Tables(1).Cell(1, 2).Select Selection.TypeText
Попробуйте так:
ActiveDocument.Tables(1).Cell(1, 2).Range.Text = "123" ' или другое значение
Сообщений [ 7 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Похожие темы
- Связь таблицы excel и документа word
- особенности форматирования в word 2003
- Связь Word и excel
- Разорвать связь Word-Excel
- Связь документов Word и Excel
- Связь таблиц екселя с таблицей Word
- Помогите с кодом Макроса
- Импорт переменной, связь Word и Excel с помощью макроса
Особенности таблицы Word и ее связь с кодом VBA
Любую работу можно сделать несколькими различными способами. В силах человека выбрать наиболее удобный для себя, оптимальный и рациональный. На портале о Microsoft Office Word вы узнаете про: как расставить нумерацию страниц в ворде с рамкой на 15.
Если говорить о работе с текстами: написании рефератов, дипломов, статей, редактировании различных документов и оформлении презентаций, то Microsoft Word дает массу возможностей для этого. Наш сайт о Microsoft Office Word даст ответ про: как поместить таблицу на одной странице.
Познакомиться с ними, расширить свои познания о программе или поделиться секретами и хитростями с другими пользователями вы можете на форуме Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: сохранить документ автоматически.
Здесь собрана основная информация и ответы на наиболее популярные вопросы по работе с приложением. Например, о создании макросов, о колонтитулах, удалении лишних пробелов. На портале о Microsoft Office Word вы узнаете про: как бруть непечатаемые символы в word 2010.
В основных разделах можно обсудить настройки самого Ворда и способы работы с текстом в различных версиях программы. На портале о Microsoft Office Word вы узнаете про: изменить лист на альбомный ворд 2010.
Подфорум «Автоматизация» предлагает освоить технику создания макросов и задания шаблонов для различных операций и функций. На портале о Microsoft Office Word вы узнаете про: как расположить страницу альбомно.
Здесь же на форуме можно найти готовые решения, разнообразные шаблоны, макросы для редактирования таблиц, оглавлений и многое другое. На портале о Microsoft Office Word вы узнаете про: преобразование презентации в word.
Возможно и оставить заявку, описав свою проблему в соответствующем подразделе. Если у вас есть какие –то оригинальные идеи и решения – форум лучшее место поделиться ими с другими пользователями Ворда. Наш сайт о Microsoft Office Word даст ответ про: антоним к слову уважаемым.