Word vba tables range

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.

Martijn Pieters's user avatar

asked Sep 25, 2009 at 17:14

romandas's user avatar

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's user avatar

MikeD

8,8612 gold badges28 silver badges50 bronze badges

answered Sep 29, 2009 at 19:49

romandas's user avatar

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]

  1. Объекты
    Range и Selection.
    Работа с текстом.
  2. Выделенный
    текст.
  3. Текстовый
    диапазон.
  4. Выделение
    текста.
  5. Вырождение
    диапазона.
  6. Форматирование
    текста.
  7. Поиск
    и замена
  8. Коллекция
    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Однако
при частом поиске или замене одних и тех же значений для этой операции удобно
назначить кнопку на панели инструментов , комбинацию клавиш или разместить ее в
контекстном меню. Для реализации этой задачи нужно сначала создать
соответствующий макрос.

Для упрощения (ускорения) создания соответствующего
программного кода можно автоматизировать процесс написания макроса.

  1. Подготовить
    документ к поиску
  2. Выбрать
    команду Сервис +Макросачать запись
  3. В
    поле Имя макроса введите имя макроса , в поле
    Описание добавьте описание макроса
  4. Нажмите
    кнопку Ok – откроется панель инструментов Остановит запись , содержащая кнопки управления записью макроса:
    Остановить запись и Пауза.
  5. Выберите
    команду Правкаайти

Укажите необходимые параметры
поиска и нажмите кнопку Найти

На панели инструментов Остановить запись нажмите кнопку Остановить
запись

Откройте окно редактирования 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>

Понравилась статья? Поделить с друзьями:
  • Word vba selection words
  • Word vba selection expand
  • Word vba selection end
  • Word vba selection copy
  • Word vba selection all