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
Создание таблиц в документе 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)» – сумма значений справа от ячейки.
title | ms.prod | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|
Working with tables |
word |
cf0858b7-6b39-4c90-552e-edb695b5cda3 |
06/08/2019 |
medium |
This topic includes Visual Basic examples related to the tasks identified in the following sections.
Creating a table, inserting text, and applying formatting
The following example inserts a four-column, three-row table at the beginning of the active document. The For Each…Next structure is used to step through each cell in the table. Within the For Each…Next structure, the InsertAfter method of the Range object is used to add text to the table cells (Cell 1, Cell 2, and so on).
Sub CreateNewTable() Dim docActive As Document Dim tblNew As Table Dim celTable As Cell Dim intCount As Integer Set docActive = ActiveDocument Set tblNew = docActive.Tables.Add( _ Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _ NumColumns:=4) intCount = 1 For Each celTable In tblNew.Range.Cells celTable.Range.InsertAfter "Cell " & intCount intCount = intCount + 1 Next celTable tblNew.AutoFormat Format:=wdTableFormatColorful2, _ ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True End Sub
Inserting text into a table cell
The following example inserts text into the first cell of the first table in the active document. The Cell method returns a single Cell object. The Range property returns a Range object. The Delete method is used to delete the existing text and the InsertAfter method inserts the «Cell 1,1» text.
Sub InsertTextInCell() If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range .Delete .InsertAfter Text:="Cell 1,1" End With End If End Sub
Returning text from a table cell without returning the end of cell marker
The following example returns and displays the contents of each cell in the first row of the first document table.
Sub ReturnTableText() Dim tblOne As Table Dim celTable As Cell Dim rngTable As Range Set tblOne = ActiveDocument.Tables(1) For Each celTable In tblOne.Rows(1).Cells Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _ End:=celTable.Range.End - 1) MsgBox rngTable.Text Next celTable End Sub
Sub ReturnCellText() Dim tblOne As Table Dim celTable As Cell Dim rngTable As Range Set tblOne = ActiveDocument.Tables(1) For Each celTable In tblOne.Rows(1).Cells Set rngTable = celTable.Range rngTable.MoveEnd Unit:=wdCharacter, Count:=-1 MsgBox rngTable.Text Next celTable End Sub
Converting existing text to a table
The following example inserts tab-delimited text at the beginning of the active document and then converts the text to a table.
Sub ConvertExistingText() With Documents.Add.Content .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3 End With End Sub
Returning the contents of each table cell
The following example defines an array equal to the number of cells in the first document table (assuming Option Base 1). The For Each…Next structure is used to return the contents of each table cell and assign the text to the corresponding array element.
Sub ReturnCellContentsToArray() Dim intCells As Integer Dim celTable As Cell Dim strCells() As String Dim intCount As Integer Dim rngText As Range If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(1).Range intCells = .Cells.Count ReDim strCells(intCells) intCount = 1 For Each celTable In .Cells Set rngText = celTable.Range rngText.MoveEnd Unit:=wdCharacter, Count:=-1 strCells(intCount) = rngText intCount = intCount + 1 Next celTable End With End If End Sub
Copying all tables in the active document into a new document
This example copies the tables from the current document into a new document.
Sub CopyTablesToNewDoc() Dim docOld As Document Dim rngDoc As Range Dim tblDoc As Table If ActiveDocument.Tables.Count >= 1 Then Set docOld = ActiveDocument Set rngDoc = Documents.Add.Range(Start:=0, End:=0) For Each tblDoc In docOld.Tables tblDoc.Range.Copy With rngDoc .Paste .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .Collapse Direction:=wdCollapseEnd End With Next End If End Sub
[!includeSupport and feedback]
- Объекты
Range и Selection.
Работа с текстом. - Выделенный
текст. - Текстовый
диапазон. - Выделение
текста. - Вырождение
диапазона. - Форматирование
текста. - Поиск
и замена - Коллекция
Tables.
1.Объекты Range и Selection.Работа с текстом.
Работа с текстом осуществляется с помощью ряда объектов.
Весь текст документа можно представить в виде пирамиды, основой которой
являются символы, а вершиной – собственно документ. В иерархическом порядке
объектов VBA документ Word можно представить как:
Символы (Characters) ® Слова (Words) ®
Предложения (Sentences) ® ®Абзацы
(Paragraphs) ®Разделы
(Sections) ®Документ
(Document)
Кроме этих объектов, явно указывающих на тот или иной
элемент документа, в VBA имеется два объекта, которые позволяют работать с
текстом как с целым, без явного структурного разделения: объект Rahge ассоциируется с любым фрагментом документа, а объект Selection – с любым выделенным фрагментом текста. Оба эти
объекта похожи по своему действию, однако они различаются по своим
функциональным возможностям.
2.Выделенный текст.
Объект Selection является одним из
базовых объектов. Это глобальный объект и предварительного объявления для него
не требуется. в целом этот
объект любое выделение в документе, а в случае если выделение вырождено, т.е.
ничего не выделено, то объект описывает текущее положение указателя.
Эта особенность часто используется для получения ссылки на
объект, описывающий текущий элемент документа.
Пример: получить ссылку на объект типа Paragraphs,
являющегося семейством всех выделенных или затронутых выделением абзацев.
Dim e As Paragraphs
Set e = Selection.Paragraphs
MsgBox e.Count
Свойством по умолчанию для объекта типа Selection
является свойство Text, возвращающее выделенный
текст.
Selection.[.Text][=Text]
Для замены текущего выделенного текста используется метод
TypeText.
Selection.TypeText(Text)
Пример: вставляем в документ текст «ХХХ» и начинаем новый
абзац.
With
Selection
.TypeText Text:=«XXX»
.TypeParagraph
End With
Для управления параметрами вставки текста можно использовать
свойство ReplaceSelection.
Selection.ReplaceSelection [=Boolean]
Если true – текущее выделение
замещается, если False – то вставлять перед
выделением.
3.Текстовый диапазон. Объект Range
предназначен для выделения и обработки фрагментов текста. Этот объект является
семейством многих объектов.
Например для выделения
абзаца, в котором сейчас находится указатель достаточно использовать код
Selection.Paragraphs(1).Range.Select
Область текста,
связанная с объектом типа Range, характеризуется
начальными и конечными символами. Для получения информации о них нужно
использовать свойства Start и End.
objrange.Start [=Position]
objrange.End [=Position]
параметр Position (типа Long) позволяет задать индекс символа, с которого должен
начаться или которым должен закончится фрагмент
текста, связанного с данным объектом objRange.
Для получения ссылки на текстовый диапазон можно
использовать метод Range.
ObjDocumet.Range(Start, End)
Параметр Start указывает на индекс
символа, с которого должен начаться диапазон, а параметр End
– на индекс последнего символа. Индексы символов соответствуют их порядковым
номерам в семействе Words, ссылку на которое
возвращает свойство Words объекта Document.
4. Выделение текста.
Формально объект Range связан
только с диапазоном текста. Этот диапазон может быть никак не связан с текущим
положением курсора или выделением. Однако диапазон, связанный с объектом Range, можно выделить в любой момент времени с помощью метода
Select.
ObjRange.Select
Пример: выделить второй абзац текущего документа.
ThisDocument.Paragraphs(2).Range.Select
5.Вырождение диапазона.
Для создания вырожденного диапазона можно использовать метод
Collapse.
objRange.Collapse [(Direction)]
Параметр Direction позволяет задать направление, в котором будет
выполнено вырождение. Если параметр имеет значение wdCollapseStart,
то вырождение выполняется в направлении начала диапазона, т.е. End:=Start. Если параметр имеет значение wdCollapseEnd, то Start:=End
Пример: снятия выделения в документе, курсор помещен в конец
выделеного диапазона.
Selection.Collapse wdCollapseEnd
6.Форматирование текста.
Объект Range чаще используется как
инструмент для форматирования выделенного текстового диапазона. Для этого, кроме
свойства объекта Font объект Range имеет
целый ряд свойств, позволяющих настроить параметры шрифта данного диапазона.
Свойство Bold – позволяет установить параметры
жирного начертания символов.
Если свойство имеет значение True, то начертание жирное , если False–
нежирное. Свойство также может возвращать значение wdUnderfined,
указывающее на смешанное начертание. Для установления стиля начертания можно
использовать следующие значения True,
False или wdToggle,
позволяющие переключить текущее написание шрифта.
objRange.Bold
[=Boolean]
Свойство CombineCharacters
Свойство позволяет сжать все символы выделенного диапазона. Если свойство имеет значение true, то выполняется сжатие.
Свойство FilTextWidth
Свойство позволяет указать ширину(в
текущих единицах измерения, в которых должен быть размещен данный диапазон).
Размер шрифта и ширину межсимвольного пространства Word подбирает автоматически
В приведенном ниже примере показан код, позволяющий уместить
текущее выделение на отрезке документа , ширина
которого эквивалентна пяти сантиметрам.
Selection.Range.FilTextWidth=CentimetersToPoints(5)
Свойство objRange.FormattedText
Свойство возвращает ссылку на объект типа Range ,
который ассоциируется с текстом в пределах данного диапазона objRange,
имеющего специфическое форматирование.
Cвойство
Italic –
позволяет установить параметры курсивного начертания символов.
Свойство ListFormat –
возвращает ссылку на объект типа Listformat, содержащего
нумерованные или маркированные списки, используемые в данном диапазоне.
Свойство ListParagraph
Свойство возвращает ссылку на объект типа ListParagraph,
содержащего нумерованные абзацы, имеющиеся в данном диапазоне.
Свойство Shading – возвращает ссылку на объект типа Shading, позволяющего указать цвет и
формат заливки для данного диапазона.
Свойство Revisions
Свойство возвращает ссылку на объект типа Revisions , который
связан с исправлениями , находящимися в данном диапазоне.
Свойство Showall[=Boolean]
Свойство позволяет указать на отображение непечатаемых
символов: табуляций, пробелов, символов абзаца, скрытого текста. True -символы
отображаются.
Свойство Style[=Style]
Свойство позволяет задать стиль для данного абзаца. Параметр
Stile(тип Stile) позволяет указать один
из существующих типов.
Свойство Underline[=Underline]
Свойство позволяет указать , как
должен быть подчеркнут текст в данном диапазоне. Параметр Underline( тип Underline) позволяет указать тип
линии подчеркивания
Метод InsertAfter вставляет
заданный текст в конце диапазона или выделения.
Синтаксис:
objRange.InsertAfter(Text)
Пример:
ActiveDocument.Range.InsertAfter
«пример»
Метод InsertParagraph
позволяет заменить заданный диапазон символов или выделения на новый абзац.
После его использования объект Range отождествляется
с новым абзацем.
Метод InsertSymbol
предназначен для вставки символа в заданное место диапазона или выделения. При
использовании данного метода содержимое диапазона или выделения удаляется. Если
этого не требуется, то перед вызовом этого метода следует использовать метод Collapse.
Синтаксис:
ObjRange.InsertSimbol (CharacterNumber, Font, Unicode)
Параметр CharacterNumber
определяет код символа. Параметр Font
определяет имя шрифта, используемого в качестве источника символов. Параметр Unicode если значение True,
то вставляется юникодовый символ, заданный аргументом
CharacterNumbe. В противном случае (по умолчанию False) будет вставлен символ ANSI, заданный аргументом CharacterNumbe.
Пример:
Selection.Collapse direction:=wdCollapseStart
Selection.InsertSymbol characterNumber:=171, Font:=»Symbol», unicode:=False «
Метод Paste позволяет
вставить содержимое буфера обмена в заданный диапазон или выделение. При его
использовании содержимое диапазона или выделения заменяется содержимым буфера
обмена. В случае если требуется вставить абзац из буфера обмена без замены
текущего абзаца, перед вызовом этого метода следует использовать метод Collapse.
7.Поиск и замена
Поиск и замена- это
стандартные инструменты любого приложенияMicrosoft Office .Как правило, команды
вызова соответствующих диалоговых окон располагаются в меню Правка(Edit). Инструменты поиска и
замены в VBAреализуются
с помощью объектов Find и Replacement.
Задачи по поиску и замене требуют своей реализации в VBA в
редких случаях, например при частом поиске и замене одного и того же сочетания , вложенном поиске или при контекстном поиске.
Стандартный инструмент поиска и замены работает следующим образом
: вы открываете окно диалога Поиск и замена(Find and Replace) , вводите в соответствующие поля необходимые значения , определяете дополнительные параметры поиска и нажимаете
кнопку Поиск(Find) или
Заменить(RepleceОднако
при частом поиске или замене одних и тех же значений для этой операции удобно
назначить кнопку на панели инструментов , комбинацию клавиш или разместить ее в
контекстном меню. Для реализации этой задачи нужно сначала создать
соответствующий макрос.
Для упрощения (ускорения) создания соответствующего
программного кода можно автоматизировать процесс написания макроса.
- Подготовить
документ к поиску - Выбрать
команду Сервис +Макрос +Начать запись - В
поле Имя макроса введите имя макроса , в поле
Описание добавьте описание макроса - Нажмите
кнопку Ok – откроется панель инструментов Остановит запись , содержащая кнопки управления записью макроса:
Остановить запись и Пауза. - Выберите
команду Правка +Найти
Укажите необходимые параметры
поиска и нажмите кнопку Найти
На панели инструментов Остановить запись нажмите кнопку Остановить
запись
Откройте окно редактирования Visual Basic for Application и
перейдите к записанному макросу.
Выполните ручное редактирование
макроса
В приведенном ниже примере
показан код, позволяющий заменить четыре идущих подряд символов пробела одним
символом табуляции
Пример:
Sub ReplaceSpace4()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text=space(4)
.Replacement.text=”^t”
.forward=true
.Wrap=WdfindWrap.wdfindall
End With
Selection.Find.Execute Replace:=wdReplaceall
End Sub
В ситуации ,
когда нужно найти фрагмент документа , а в нем еще один фрагмент – задача
становится неоднозначной. В этом случае можно создать два макроса , один из которых будет вызываться и другого.
В приведенном ниже примере
реализован одкратно вложенный поиск и замена , однако число вложений может быть и больше.
Переменная strText(тип string) содержит текст, вкотром осуществляется поиск .
Если заданный текст будет найден (метод Execute возвращает True), то осуществляется вызов процедуры
ReplaceSpace4,
показанной в предыдущем примере .
Пример:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text= strText
If .Execute Then ReplaceSpace4
End With
8.Коллекция Tables.
Таблица представляет собой
упорядоченную структуру, предназначенную для хранения организованных в виде
строк и столбцов наборов данных. Элемент таблицы, находящийся на пересечении
строки и столбца, называется ячейкой.
Таблица Word
имеет такую же структуру, как и электронная таблица Excel
– элемент таблицы, находящийся на пересечении строки и столбца, называется
ячейкой и идентифицируется по имени столбца и номеру строки.
В VBA для доступа к таблицам
используется объект Tables, являющийся семейством
объектов Table, каждый из которых связан с конкретной
таблицей. Для получения ссылки на семейство Tables
можно использовать свойство Tables объекта Document.
Общее число таблиц, имеющихся в
документе, содержится в свойстве Count. Для
получения доступа к конкретной таблице можно использовать метод Item, который является методом по
умолчанию.
Синтаксис:
Set oblTable=objDocument.Tables.Item(Key)
Параметр Key,
является уникальным идентификатором каждой таблицы, хранящейся в объекте Tables.
Для создания новой таблицы
используется метод Add объекта Tables. Этот метод возвращает ссылку на созданную таблицу(Table).
objTables.Add
(Range, NumRows, NumColums)
Параметр Range
позволяет указать область документа, куда будет вставлена таблица. Если
параметр не пустой, т.е. имеется выделенная область, то она будет заменена
вставляемой таблицей.
Параметры NumRows,
NumColums позволяют указать на число строк и
столбцов таблицы.
Пример: создадим таблицу в выделенном
месте или там где стоит курсор.
Set instable = ActiveDocument.Tables.Add(Selection.Range, 4, 10)
Содержание
- 1 Adding a Column to a Table
- 2 Adding a Row to a Table
- 3 Converting a Table or Rows to Text
- 4 Converts the current selection to a five-column table, separating the information at commas.
- 5 Declare the variable tempTable and then select the first table in the document named Log.doc and assign its Range object to tempTable
- 6 Deletes the first cell in the first row of the first table in the active document and shifts the other cells in the first row to the left to fill the gap:
- 7 delete the column in which the range testRange ends if the range is more than one column wide:
- 8 Deleting a Column from a Table
- 9 Deleting a Row from a Table
- 10 Deleting Cells
- 11 Entering Text in a Cell
- 12 Finding Out Where the Selection Is in the Table
- 13 Inserting a Cell
- 14 inserts a new, blank, non-autofitting table containing 10 rows and 5 columns at the current position of the insertion point in the active document:
- 15 Making Sure the Selection Is within a Table
- 16 Returning the Text within a Cell
- 17 Selecting a Column
- 18 Selecting a Range of Cells
- 19 Selecting a Row
- 20 Selecting a Table in the active document:
- 21 Selects the first table in the current selection:
- 22 Set the Height property of the row or rows in question by specifying the height in points
- 23 Setting the Height of One or More Rows
- 24 Setting the Width of a Column
- 25 Strip off the last two characters when assigning the Text property to a string:
- 26 The SetWidth method sets the width of one or more columns and specify how the other columns in the table should change as a result: expression.SetWidth ColumnWidth, RulerStyle
- 27 The Width property lets you change the width of a column without worrying about the effect on the other columns. Specify the width you want in points-for example:
- 28 Use the ConvertToText method with a Table object, a Row object, or a Rows collection: converts only the first row of the selected table to tab-delimited text
- 29 wdDeleteCellsEntireRow deletes the whole row.
- 30 wdDeleteCellsShiftLeft moves cells across to the left to fill the gap.
- 31 wdDeleteCellsShiftUp moves cells up to fill the gap.
- 32 wdEndOfRangeColumnNumber returns the number of the column in which the end of the selection or range falls.
Adding a Column to a Table
<source lang="vb">
«The following statements use the Count property to check the number of columns in the first table in the active document and
Sub add()
With ActiveDocument.Tables(1) .Select If .Columns.Count < 5 Then Do Until .Columns.Count = 5 .Columns.add BeforeColumn:=.Columns(.Columns.Count) Loop End If End With
End Sub
</source>
Adding a Row to a Table
<source lang="vb">
Sub addRow()
Documents("yourDoc.doc").Tables(1).Rows.Add BeforeRow:=1
End Sub
</source>
Converting a Table or Rows to Text
<source lang="vb">
Sub sep()
Selection.Tables(1).ConvertToText Separator:="*"
End Sub
</source>
Converts the current selection to a five-column table, separating the information at commas.
<source lang="vb">
Sub sele()
Set myTable = Selection.ConvertToTable(wdSeparateByCommas, _ Selection.Paragraphs.Count, 5, , , , , , , , , , , True, _ wdAutoFitContent, wdWord9TableBehavior)
End Sub
</source>
Declare the variable tempTable and then select the first table in the document named Log.doc and assign its Range object to tempTable
<source lang="vb">
Sub tableSel()
Dim tempTable Documents("Log.doc").Tables(1).Select Set tempTable = Selection.Tables(1).Range tempRange.Tables(2).Select
End Sub
</source>
Deletes the first cell in the first row of the first table in the active document and shifts the other cells in the first row to the left to fill the gap:
<source lang="vb">
Sub del()
ActiveDocument.Tables(1).Rows(1).Cells(1).Delete _ ShiftCells:=wdDeleteCellsShiftLeft
End Sub
</source>
delete the column in which the range testRange ends if the range is more than one column wide:
<source lang="vb"> With testRange If .Information(wdStartOfRangeColumnNumber) <> _ .Information(wdEndOfRangeColumnNumber) Then _ .Tables(1).Columns(.Information _ (wdEndOfRangeColumnNumber)).Delete End With </source>
Deleting a Column from a Table
<source lang="vb">
Sub del()
ActiveDocument.Tables(1).Columns(1).Delete
End Sub
</source>
Deleting a Row from a Table
<source lang="vb">
Sub del()
Documents("yourDoc.doc").Tables(3).Rows(1).Delete
End Sub
</source>
Deleting Cells
<source lang="vb">
«wdDeleteCellsEntireColumn deletes the whole column the specified cell or cells is in.
Sub del()
ActiveDocument.Tables(1).Rows(1).Cells(1).Delete _ ShiftCells:=wdDeleteCellsEntireColumn
End Sub
</source>
Entering Text in a Cell
<source lang="vb">
Sub text()
With Selection.Tables(1).Rows(1) .Cells(1).Range.text = "Sample text in first cell." .Cells(2).Range.text = "Sample text in second cell." .Cells(3).Range.text = "Sample text in third cell." End With
End Sub
</source>
Finding Out Where the Selection Is in the Table
<source lang="vb">
Sub sel()
If Selection.Information(wdAtEndOfRowMarker) = True Then _ Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub
</source>
Inserting a Cell
<source lang="vb">
Sub insert()
Documents("Tables.doc").Tables(1).Rows(1).Cells.Add _ BeforeCell:=Documents("Tables.doc").Tables(1).Rows(1).Cells(2)
End Sub
</source>
inserts a new, blank, non-autofitting table containing 10 rows and 5 columns at the current position of the insertion point in the active document:
<source lang="vb">
Sub table()
ActiveDocument.Tables.add Range:=Selection.Range, NumRows:=10, _ NumColumns:=5, DefaultTableBehavior:=wdWord8TableBehavior
End Sub
</source>
Making Sure the Selection Is within a Table
<source lang="vb">
Sub withTable()
If Selection.Information(wdWithInTable) = True Then "take actions here End If
End Sub
</source>
Returning the Text within a Cell
<source lang="vb">
Sub text()
Dim strCellText As String strCellText = ActiveDocument.Tables(1).Rows(2).Cells(1).Range.Text Debug.Print strCellText
End Sub
</source>
Selecting a Column
<source lang="vb">
«To select a column, use the Select method with the appropriate Column object.
Sub sel()
Documents("yourDoc.doc").Tables(3).Columns(2).Select
End Sub
</source>
Selecting a Range of Cells
<source lang="vb">
«To select a range of cells within a table, declare a Range variable, assign to it the cells you want to select, and then select the range
Sub cellSel()
Dim myCells As Range With ActiveDocument Set myCells = .Range(Start:=.Tables(1).Cell(1, 1).Range.Start, _ End:=.Tables(1).Cell(1, 4).Range.End) myCells.Select End With
End Sub
</source>
Selecting a Row
<source lang="vb">
Sub sel()
Documents("Tables.doc").Tables(.Tables.Count).Rows.Last.Select
End Sub
</source>
Selecting a Table in the active document:
<source lang="vb">
Sub table1()
ActiveDocument.Tables(1).Select
End Sub
</source>
Selects the first table in the current selection:
<source lang="vb">
Sub tableSel1()
Selection.Tables(1).Select
End Sub
</source>
Set the Height property of the row or rows in question by specifying the height in points
<source lang="vb">
Sub height()
Documents("Tables.doc").Tables(3).Rows(3).Height = 33
End Sub
</source>
Setting the Height of One or More Rows
<source lang="vb">
Sub rowHeight()
ActiveDocument.Tables(4).Rows(2).HeightRule = wdRowHeightAuto
End Sub
</source>
Setting the Width of a Column
<source lang="vb">
Sub auto()
ActiveDocument.Tables(1).Columns.AutoFit
End Sub
</source>
Strip off the last two characters when assigning the Text property to a string:
<source lang="vb">
Sub strip()
Dim strCellText As String strCellText = ActiveDocument.Tables(3).Rows(2).Cells(1).Range.Text Debug.Print strCellText strCellText = Left(strCellText, Len(strCellText) - 2) Debug.Print strCellText
End Sub
</source>
The SetWidth method sets the width of one or more columns and specify how the other columns in the table should change as a result: expression.SetWidth ColumnWidth, RulerStyle
<source lang="vb">
Sub ruler()
ActiveDocument.Tables(1).Columns(2).SetWidth ColumnWidth:=50, _ RulerStyle:=wdAdjustProportional
End Sub
</source>
The Width property lets you change the width of a column without worrying about the effect on the other columns. Specify the width you want in points-for example:
<source lang="vb">
Sub width()
ActiveDocument.Tables(11).Columns(44).Width = 100
End Sub
</source>
Use the ConvertToText method with a Table object, a Row object, or a Rows collection: converts only the first row of the selected table to tab-delimited text
<source lang="vb">
Sub tab()
Selection.Tables(1).Rows(1).ConvertToText Separator:=wdSeparateByTabs
End Sub
</source>
wdDeleteCellsEntireRow deletes the whole row.
<source lang="vb">
Sub del()
ActiveDocument.Tables(1).Rows(1).Cells(1).Delete _ ShiftCells:=wdDeleteCellsEntireRow
End Sub
</source>
wdDeleteCellsShiftLeft moves cells across to the left to fill the gap.
<source lang="vb">
Sub del()
ActiveDocument.Tables(1).Rows(1).Cells(1).Delete _ ShiftCells:=wdDeleteCellsShiftLeft
End Sub
</source>
wdDeleteCellsShiftUp moves cells up to fill the gap.
<source lang="vb">
Sub del()
ActiveDocument.Tables(1).Rows(1).Cells(1).Delete _ ShiftCells:=wdDeleteCellsShiftUp
End Sub
</source>
wdEndOfRangeColumnNumber returns the number of the column in which the end of the selection or range falls.
<source lang="vb"> With testRange If .Information(wdStartOfRangeColumnNumber) <> _ .Information(wdEndOfRangeColumnNumber) Then _ .Tables(1).Columns(.Information _ (wdEndOfRangeColumnNumber)).Delete End With </source>