Vba word this document tables

Создание таблиц в документе 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 keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Document.Tables property (Word)

vbawd10.chm158007302

vbawd10.chm158007302

word

Word.Document.Tables

a0e09aff-af98-5d10-ba49-01ba6fcfa2d1

06/08/2017

medium

Document.Tables property (Word)

Returns a Table collection that represents all the tables in the specified document. Read-only.

Syntax

expression. Tables

expression A variable that represents a Document object.

Remarks

For information about returning a single member of a collection, see Returning an object from a collection.

Example

This example creates a 5×5 table in the active document and then applies a predefined format to it.

Selection.Collapse Direction:=wdCollapseStart 
Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range, _ 
NumRows:=5, NumColumns:=5) 
myTable.AutoFormat Format:=wdTableFormatClassic2

This example inserts numbers and text into the first column of the first table in the active document.

num = 90 
For Each acell In ActiveDocument.Tables(1).Columns(1).Cells 
 acell.Range.Text = num & " Sales" 
 num = num + 1 
Next acell

See also

Document Object

[!includeSupport and feedback]

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

Need help to modify this VBA code to read multiple tables from a Word document. It only reads one table, but I would like to import more than one into the same Excel sheet.

Sub ImportWordTables()
   'Imports a table from Word document 

   Dim wdDoc         As Object
   Dim wdFileName    As Variant
   Dim TableNo       As Integer  'number of tables in Word doc
   Dim iTable        As Integer  'table number index
   Dim iRow          As Long     'row index in Excel
   Dim iCol          As Integer  'column index in Excel

   wdFileName = Application.GetOpenFilename("Word files (*.doc*),*.doc*", , _
     "Browse for file containing table to be imported")

   If wdFileName = False Then Exit Sub '(user cancelled import file browser)

   Set wdDoc = GetObject(wdFileName)   'open Word file

   With wdDoc
      TableNo = wdDoc.tables.Count
      If TableNo = 0 Then
         MsgBox "This document contains no tables", _
         vbExclamation, "Import Word Table"
      ElseIf TableNo > 1 Then
         TableNo = InputBox("This Word document contains " & TableNo & " tables." & vbCrLf & _
         "Enter table number of table to import", "Import Word Table", "1")
      End If
      With .tables(TableNo)
         'copy cell contents from Word table cells to Excel cells
         For iRow = 1 To .Rows.Count
            For iCol = 1 To .Columns.Count
               Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
            Next iCol
         Next iRow
      End With
   End With
   Set wdDoc = Nothing       
End Sub

Community's user avatar

asked Jul 27, 2014 at 23:40

user601828's user avatar

So this is the code, but it doesn’t entirely answer my questions.
I just need the tables from the pdf.

Sub Imp_Into_XL(PDF_File As String, Each_Sheet As Boolean)

'This procedure get the PDF data into excel by following way

'1.Open PDF file
'2.Looping through pages
'3.get the each PDF page data into individual _
  sheets or single sheet as defined in Each_Sheet Parameter


Dim AC_PD As Acrobat.AcroPDDoc              'access pdf file
Dim AC_Hi As Acrobat.AcroHiliteList         'set selection word count
Dim AC_PG As Acrobat.AcroPDPage             'get the particular page
Dim AC_PGTxt As Acrobat.AcroPDTextSelect    'get the text of selection area

Dim WS_PDF As Worksheet
Dim RW_Ct As Long                           'row count
Dim Col_Num As Integer                      'column count
Dim Li_Row As Long                          'Maximum rows limit for one column
Dim Yes_Fir As Boolean                      'to identify beginning of page

Li_Row = Rows.Count

Dim Ct_Page As Long                         'count pages in pdf file
Dim i As Long, j As Long, k As Long         'looping variables
Dim T_Str As String

Dim Hld_Txt As Variant                      'get PDF total text into array

RW_Ct = 0                                   'set the intial value
Col_Num = 1                                 'set the intial value

Application.ScreenUpdating = False

Set AC_PD = New Acrobat.AcroPDDoc
Set AC_Hi = New Acrobat.AcroHiliteList

'set maximum selection area of PDF page

AC_Hi.Add 0, 32767

With AC_PD

    'open PDF file

    .Open PDF_File

    'get the number of pages of PDF file

    Ct_Page = .GetNumPages

    'if get pages is failed exit sub

    If Ct_Page = -1 Then
        MsgBox "Pages Cannot determine in PDF file '" & PDF_File & "'"
        .Close
        GoTo h_end
    End If

    'add sheet only one time if Data retrive in one sheet

    If Each_Sheet = False Then
        Set WS_PDF = Worksheets.Add(, Worksheets(Sheets.Count))
        WS_PDF.Name = "PDF3Text"
    End If

    'looping through sheets

    For i = 1 To Ct_Page

        T_Str = ""
        'get the page
        Set AC_PG = .AcquirePage(i - 1)

        'get the full page selection
        Set AC_PGTxt = AC_PG.CreateWordHilite(AC_Hi)

        'if text selected successfully get the all the text into T_Str string

        If Not AC_PGTxt Is Nothing Then

            With AC_PGTxt

                For j = 0 To .GetNumText - 1
                    T_Str = T_Str & .GetText(j)
                Next j

            End With

        End If


        If Each_Sheet = True Then

            'add each sheet for each page

            Set WS_PDF = Worksheets.Add(, Worksheets(Sheets.Count))

        End If

        'transfer PDF data into sheet

        With WS_PDF

            If Each_Sheet = True Then

                .Name = "Page-" & i

                'get the PDF data into each sheet for each PDF page

                'if text accessed successfully then split T_Str by VbCrLf
                'and get into array Hld_Txt and looping through array and fill sheet with PDF data

                If T_Str <> "" Then
                    Hld_Txt = Split(T_Str, vbCrLf)

                    For k = 0 To UBound(Hld_Txt)
                        T_Str = CStr(Hld_Txt(k))
                        If Left(T_Str, 1) = "=" Then T_Str = "'" & T_Str
                        .Cells(k + 1, 1).Value = T_Str
                    Next k
                        Else

                            'information if text not retrive from PDF page

                            .Cells(1, 1).Value = "No text found in page " & i
                End If

                    Else

                        'get the pdf data into single sheet

                        If T_Str <> "" Then
                            Hld_Txt = Split(T_Str, vbCrLf)

                            Yes_Fir = True

                            For k = 0 To UBound(Hld_Txt)

                                RW_Ct = RW_Ct + 1

                                'check begining of page if yes enter PDF page number for any idenfication

                                If Yes_Fir Then
                                    RW_Ct = RW_Ct + 1
                                    .Cells(RW_Ct, Col_Num).Value = "Text In Page - " & i
                                    RW_Ct = RW_Ct + 2
                                    Yes_Fir = False
                                End If

                                'check for maximum rows if exceeds start from next column

                                If RW_Ct > Li_Row Then
                                    RW_Ct = 1
                                    Col_Num = Col_Num + 1
                                End If

                                T_Str = CStr(Hld_Txt(k))
                                If Left(T_Str, 1) = "=" Then T_Str = "'" & T_Str
                                .Cells(RW_Ct, Col_Num).Value = T_Str

                            Next k

                                Else

                                    RW_Ct = RW_Ct + 1
                                    .Cells(RW_Ct, Col_Num).Value = "No text found in page " & i
                                    RW_Ct = RW_Ct + 1

                        End If

            End If

        End With
    Next i

    .Close

End With

Application.ScreenUpdating = True

MsgBox "Imported"

h_end:

Set WS_PDF = Nothing
Set AC_PGTxt = Nothing
Set AC_PG = Nothing
Set AC_Hi = Nothing
Set AC_PD = Nothing

End Sub

answered Aug 13, 2014 at 17:38

user601828's user avatar

user601828user601828

4893 gold badges7 silver badges16 bronze badges

You can use this to do something with each table in the document:

Dim oTbl As Table

For Each oTbl In ActiveDocument.Tables
    ' Do something
    Debug.Print oTbl.Columns.Count & " " & oTbl.Rows.Count
Next

You’ll need to figure out how you want the user to specify which table/tables to work with.

Something like this, perhaps:

Sub UserChosenTables()
    Dim oTbl As Table
    Dim sTemp As String
    Dim aTables() As String
    Dim x As Long

    sTemp = InputBox("Which tables", "Select tables")

    If Len(sTemp) = 0 Then ' user entered nothing
        Exit Sub
    End If

    aTables = Split(sTemp, ",")

    ' of course you'll want to add more code to CYA in case the user
    ' asks for a table that's not there or otherwise enters something silly.
    ' You might also want to let them enter e.g. ALL if they want you to do all of them
    ' (but don't know how many there are)
    For x = LBound(aTables) To UBound(aTables)
        Set oTbl = ActiveDocument.Tables(CLng(aTables(x)))
        ' do [whatever] with table here
        Debug.Print oTbl.Columns.Count & " " & oTbl.Rows.Count
    Next

End Sub

answered Jul 27, 2014 at 23:59

Steve Rindsberg's user avatar

Steve RindsbergSteve Rindsberg

14.2k1 gold badge29 silver badges34 bronze badges

4

  1. Коллекция
    Tables.
  2. Форматирование
    таблицы.
  3. Строки
    и столбцы.
  4. Ячейки.
  5. Вычисления.

1.Коллекция 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
позволяют указать на число строк и
столбцов таблицы.

Пример: создадим таблицу в
выделенном месте или там где стоит курсор.

2.Форматирование таблицы.

После создания таблицы ее можно
отформатировать нужным образом: добавить заливку, изменить формат границ,
изменить стиль и т.д.

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

Для их применения используется метод
AutoFormat
.

objTable.AutoFormat(Format, [ApplyBorders,
ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit])

Параметр Format
содержит один из допустимых форматов. Список всех имеющихся форматов и
результат их применения можно увидеть в списке Стили таблицы окна диалога Автоформат таблицы (таблица®автоформат).

Параметр ApplyBorders
указывает, должны ли использоваться границы, установленные по умолчанию для
данного формата. Если True(значение по умолчанию), то
текущие границы будут заменены границами, предусмотренными в применяемом
автоформате.

Параметр ApplyShading
указывает, должна ли использоваться заливка. Если True
(значение по умолчанию), то для таблицы будет установлена заливка в
соответствии со значением, предусмотренном в
применяемом автоформате.

Параметр ApplyFont
указывает, должен ли изменятся шрифт таблицы. Если True, то для текста в таблице будет применен шрифт, предусмотренный
в применяемом автоформате.

Параметр ApplyColor
указывает на необходимость использования цветового оформления цветового
оформления таблицы. По умолчанию имеет значение True.

Параметр ApplyHeadingRows
указывает на необходимость изменения формата заголовков столбцов (первой строки
таблицы). По умолчанию имеет значение True.

Параметр ApplyLastRow
указывает на необходимость изменения формата последней строки таблицы. По
умолчанию имеет значение False, означающее, что
особый формат к последней строке не применяется.

Параметр ApplyFirstColumn
указывает на необходимость изменение формата первого столбца таблицы. По
умолчанию имеет значение True.

Параметр ApplyLastColumn
указывает на необходимость изменение формата последнего столбца таблицы. По умолчанию
имеет значение False, означающее, что особый формат к
последнему столбцу не применяется.

Параметр AutoFit
указывает на автоматический подбор ширины столбцов в зависимости от размещаемых
в них данных. По умолчанию имеет значение True.

Пример: применяем автоформат Классический2  к таблице, расположенной первой от начала
активного документа.

ActiveDocument.Tables(1).AutoFormat
Format:=WdTableFormat.wdTableFormatClassic2

 Тип
используемого пользовательского форматирования содержится в свойстве AutoFormatType. Свойство возвращает одно из значений
типа wdTableFormat.

Для форматирования границ таблицы
используется свойство Borders, которое
возвращает ссылку на объект типа Вorders,
связанный с границами данной таблицы.

Синтаксис:

objTable.Borders

Пример: назначение первой таблице
в документе оформление границ.

 With ActiveDocument.Tables(1).Borders

.OutsideLineStyle = wdLineStyleSingle             внешние границы

.OutsideLineWidth =
wdLineWidth100pt

.InsideLineStyle = wdLineStyleSingle                внутренние границы

.InsideLineWidth =
wdLineWidth300pt

End With

3.Строки и столбцы.

Таблица состоит из набора строк и
столбцов. Строки содержатся в семействе Rows, возвращаемое свойством Rows, а
столбцы – в семействе Columns, возврщаемое
свойством Columns.

Определенная строка или столбец связаны с объектами типа Row или Column. Доступ к конкретной строке или столбцу
осуществляется с помощью метода Item,
являющегося для объектов Rows  и Columns методом
по умолчанию.

Индексация столбцов и строк
начинается с единицы. Индекс «единица» получает первая сверху строка и крайний
левый столбец. Индекс последней строки и столбца можно получить с помощью
свойства Count, которое возвращает количество
членов   в коллекции.

Пример: выпадающее окно с
сообщением о количестве столбцов в таблице 1.

 MsgBox ActiveDocument.Tables(1).Columns.Count

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

Для добавления в таблицу новых
строк (столбцов) используется метод Add.

Синтаксис:

ObjTable.Rows.Add (Before)

Параметр Before
– указывает, перед какой строкой будет вставлена строка. Если параметр опущен,
то строка добавляется в конец таблицы.

Пример:

Set tabv = ActiveDocument.Tables(1).Rows.Add(beforerow:=ActiveDocument.Tables(1).Rows(1))

Чтобы установить высоту строки,
используется метод SetHeight.

Синтаксис:

objRow.SetHeight(RowHeight, HeightRule)

параметр RowHeight
указывает на новую высоту строки в пунктах.

Параметр HeightRule
– указывает на способ изменения высоты:

WdRowHeightAtLeast
– размер, указанный в параметре RowHeigh, является
минимальным.

WdRowHeightAuto
— размер, указанный в параметре RowHeigh ,является
точным.

WdRowHeightExactly
– автоматический подбор высоты строк (параметр RowHeigh
игнорируется).

Получить информацию о текущей
ширине строки и правиле ее изменения можно с помощью свойств Height и HeightRule.

Синтаксис:

objRow.
Height [=Height]

Параметр Height
(тип Single) позволяет задать необходимую высоту
строки в пунктах.

Синтаксис:

objRow.
HeightRule[=Rule]

Параметр Rule
указывает на правило изменения ширины ячейки:

   wdRowHeightAtLeast
— минимальная ширина, которая может быть на­значена строке, указывается в
свойстве Height;

   wdRowHeightExactly
— ширина строки должна быть точно равна зна­чению, указанному в свойстве Height;

   wdRowHeightAuto
ширина строки подбирается автоматически в за­висимости от размера используемого
шрифта или размера вставок.

Чтобы установить одинаковую
высоту всех строк, необходимо исполь­зовать метод DistributeHeight
объекта Rows.

objRows.
DistributeHeight

Для украшения текста документа
часто используются прием создания отступа между левой границы ячейки и текстом.
Этот прием часто применяют при создании таблиц на web-страницах. Для создания
отступа в ячейках таблицы можно использовать свойство SpaceBetweenColumns.
При использовании этого свойства в объекте Rows
выполняется добавление отступа во все ячейки таблицы, а при использовании в Row — только для ячеек данной строки.

Синтаксис

objRows.SpaceBetweenColumns[ = Space]

Параметр Space
(тип Single) позволяет указать на ширину отступа
в пунктах. Значение, передаваемое параметром Space,
не может быть меньше 0 и больше ширины ячейки.

В приведенном ниже примере
показан код, позволяющий создать в первой строке первой таблицы активного
документа отступ, равный 36 пунктам.

Пример

With ActiveDocument.Tables(l)

.Rows(l).SpaceBetweenColumns = InchesToPoints(0.5)

 End With

Чтобы установить ширину столбца и
правило ее изменения применя­ется метод SetWidth.
Этот метод используется как в объекте типа Columns,
так и объекте типа Column. Если используется метод
объекта Columns, то изменения ширины касаются всех
столбцов, а если метод объекта Column— то только
данного столбца.

оbjColumns.SetWidth(ColumnWidth,  RulerStyle)

Параметр ColumnWidth
(тип Single) указывает на новую ширину столб­ца в
точках, а параметр RulerStyle (тип WdRulerStyle) — на способ изме­нения ширины. Параметр RulerStyle может принимать следующие
значения:

       wdAdjustNone (значение по умолчанию) — ширина столбца
соответ­ствует указанному значению. Изменение ширины столбца выполня­ется за
счет смещения левой или правой границы таблицы (столбца).

        wdAdjustSameWidth
ширина столбца соответствует указанному значению. Изменение ширины выполняется
за счет смещения внутрен­них границ таблицы. Правая граница сохраняет свое
положение.

       wdAdjustFlrstColumn — ширина первого столбца соответствует
указан­ному значению. Изменение ширины выполняется за счет смещения правой
границы столбца. Размер остальных столбцов сохраняется. Если ширина превышает
суммарную ширину первой и второй ячеек, то происходит сдвиг правой границы
таблицы.

       wdAdjustProportional — ширина первого столбца соответствует
ука­занному значению. Размер остальных столбцов подбирается авто­матически, так
чтобы общая ширина таблицы сохранилась.

       Для
получения информации о текущей ширине столбца можно использовать свойство Width.

       Синтаксис:

       ОbjColumns.Width[=Width]

       Параметр
Width (типа Single)
позволяет указать нужную ширину столбца.

       Чтобы
установить одинаковую ширину всех столбцов, необходимо использовать метод DistributeWidth объекта Columns.

       Objcolumns.DistributeWidth

       Для
автоматического подбора ширины столбцов используется метод AutoFit.

       ObjColumn.AutoFit

       Для
удаления строк (столбцов) используется метод Delete.

       4.Ячейки.

       Доступ
к ячейкам данной строки или столбца осуществляется с помощью объекта Cells, который является семейством объектов Cell, связанных с конкретными ячейками.

       Синтаксис:

      
Set
objCells = objTables.Rows(key).Cells

       или

      
Set
objCells=objTables.Columns(key).Cells

       Здесь
objTables указывает на таблицу, с ячейками
которой будет выполняться работа, а key
строка или столбец в таблице, ячейки которой входят в семейство Cells.

        

       Ссылку
на определенную ячейку можно получить с помощью метода Cell
объекта Table.

       Синтаксис:

       ObjTable.Cell (Row,Column)

Set instable = ActiveDocument.Tables.Add(Selection.Range, 4, 10)

Для добавления новой ячейки используется метод Add.

Синтаксис:

ObjCells.Add [(BeforeCell)]

Параметр BeforeCell
указывает на ячейку, перед которой должна быть вставлена новая ячейка. Если
параметр опущен, то ячейка вставляется в конец столбца (строки). Метод
возвращает ссылку на созданную ячейку.

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

Чтобы узнать положение текущей ячейки в строке или столбце,
можно использовать свойство RowIndex или ColumnIndex. Оба свойства возвращают ссылку
на объект типа Cell и предназначены только для
чтения.

Для выделения (активизации) текущей ячейки используется
метод Select.

Синтаксис:

objCell.Select

Для объединения нескольких ячеек в одну (инструмент слияния)
используется метод Merge.

Синтаксис:

ObjCell.Merge (MergeTo)

Параметр MergeTo  (типа Cell)
содержит объект типа Cell (ячейка), с которым
выполняется слияние. Если указана ячейка, не имеющая общей
границы с текущей, то выполняется слияние всех ячеек, находящихся в
прямоугольнике, у которого данная ячейка и ячейка, указанная в параметре MergeTo, являются угловыми.

Для разбиения объединенных ячеек или одной ячейки на
несколько используется метод Split.

Синтаксис:

ObjCell.Split[(NumRows,NumColumns)]

Параметр NumRows (типа long) содержит значение,
указывающее на число строк, на которые должна быть разбита данная ячейка.
Параметр NumColumns (типа long)
содержит значение, указывающее на число столбцов, на которые должна быть
разбита данная ячейка.

Пример:

ActiveDocument.Tables(1).Cell(1, 1).Split 2, 3

5.Вычисления.

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

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

Синтаксис:

ObjCell.Formula (Formula, NumFormat)

Параметр Formula
содержит строковое выражение, описывающее используемое выражение. Параметр NumFormat
определяет числовой формат данных, которые будут отображены в данной ячейке.

При использовании стандартных инструментов вставки формул
эти выражения содержатся в соответствующих полях. Например,
выражение “=SUM(A4:
C4)” позволяет отобразить значение,
получаемое в результате выполнения суммирования значений трех ячеек: А4, В4,
С4. Кроме непосредственной ссылки на конкретные ячейки можно использовать общие
ссылки, например на все ячейки, расположенные выше(Above) или левее (Left).

По умолчанию в таблицах Word можно использовать следующие функции:

       Abs(X) — возвращает абсолютное значение
числа или формулы (без знака);

       And(X;Y) — возвращает значение 1, если оба логических выраже­ния, X и
У, истинны, или 0 (ноль), если хотя бы одно из них ложно;

       Average(List) — возвращает среднее значение из
списка значений List,

       Count (List) — возвращает
количество элементов в списке List;

       Defined(X) — возвращает значение 1, если
выражение X допустимо, или 0 (ноль), если выражение не может быть
вычислено;

       Fal se
возвращает значение 0 (ноль);

       Int(X) — возвращает целую часть
числа или значения формулы X;

       Min(List) — возвращает наименьшее значение в
списке List;

       Max(List) — возвращает наибольшее значение в
списке List;

       Mod(X;Y) — возвращает остаток от деления X на Y;

       Not(X) — возвращает значение 0 (ложь), если
логическое выражение X истинно, или 1 (истина), если оно ложно;

       Or(X;Y) — возвращает значение 1 (истина),
если хотя бы одно  из двух логических
выражений X и Y
истинно, или 0 (ложь), если оба  ложны;

       Product (List) — возвращает произведение
значений, включенных в список List.
Например функция «= Product (1,3,7,9)» возвращает значение 189;

       Round(X; У) — возвращает значение X, округленное до
указанного десятичного разряда Y;

       Sign (X) указывает
знак числа: возвращает значение 1, если X > О, или -1 в противном случае;

       Sum(List) — возвращает сумму
значений или формул, включенных в список. List;

       True — возвращает значение 1.

       Параметр
NumFormat,
является маской, которая определяет формат числовых значений. Эта маска
может содержать ряд специальных сим­волов, которые приведены ниже.

       0
(нуль) — возвращает цифру. Если полученное значение не содер­жит цифру в этой
позиции, то возвращается 0 (нуль). Например, если имеется выражение типа Formula:=»= 4 + 5″,
NumFormat:=
«00,00», то возвращаемое значение будет следующим: «09,00».

       #
— возвращает цифру. Если полученное значение не содержит цифру в этой позиции,
возвращается пробел. Например, Formula:=”=
11 + 5″, NumFormat:=
«###» возвращает значение «-15».

       х — если «х»
находится слева от десятичного разделителя, цифры расположенные слева от него,
отбрасываются, а если справа — то значение округляется до указанного знака.
Например, Formula:=»=
111053 + 111439″, NumFormat:= «x$$$» возвращает значение «492», а Formula:=»= 1/8″, NumFormat:=
«0,00x»
возвращает значение «0,125».

       .
или , (десятичный разделитель) —задает
положение десятичного разделителя. Например, выражение NumFormat:
= «###, 00») возвращает значение типа «495,47».

       пробел
(разделитель групп разрядов) — разделяет число на группы по   три  
цифры   в   каждой.  
Например,   выражение   NumForrcat:»###» возвращает значение
типа «2 456 800».

       минус)
— добавляет минус к отрицательным или пробел — ко всем остальным значениям.

       + (плюс) — добавляет плюс к положительным, минус к отрицательным
или пробел — к нулевым значениям.

       %,
$, * и т. д. — включает в значение указанный знак. Например, выражение (NumFormat:=
«##%») возвращает значение типа «33 %».

       Для
автоматического вычисления суммы значений можно использовать метод AutoSum.

       Синтаксис:

       ObjCell.AutoSum

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

Параметр ApplyBorders
указывает, должны ли использоваться границы, установленные по умолчанию для
данного формата. Если True(значение по умолчанию), то
текущие границы будут заменены границами, предусмотренными в применяемом
автоформате.

Параметр ApplyShading
указывает, должна ли использоваться заливка. Если True
(значение по умолчанию), то для таблицы будет установлена заливка в
соответствии со значением, предусмотренном в
применяемом автоформате.

Параметр ApplyFont
указывает, должен ли изменятся шрифт таблицы. Если True, то для текста в таблице будет применен шрифт, предусмотренный
в применяемом автоформате.

Параметр ApplyColor
указывает на необходимость использования цветового оформления цветового
оформления таблицы. По умолчанию имеет значение True.

Параметр ApplyHeadingRows
указывает на необходимость изменения формата заголовков столбцов (первой строки
таблицы). По умолчанию имеет значение True.

Параметр ApplyLastRow
указывает на необходимость изменения формата последней строки таблицы. По
умолчанию имеет значение False, означающее, что
особый формат к последней строке не применяется.

Параметр ApplyFirstColumn
указывает на необходимость изменение формата первого столбца таблицы. По
умолчанию имеет значение True.

Параметр ApplyLastColumn
указывает на необходимость изменение формата последнего столбца таблицы. По умолчанию
имеет значение False, означающее, что особый формат к
последнему столбцу не применяется.

Параметр AutoFit
указывает на автоматический подбор ширины столбцов в зависимости от размещаемых
в них данных. По умолчанию имеет значение True.

Пример: применяем автоформат Классический2  к таблице, расположенной первой от начала
активного документа.

 Тип
используемого пользовательского форматирования содержится в свойстве AutoFormatType. Свойство возвращает одно из значений
типа wdTableFormat.

Для форматирования границ таблицы
используется свойство Borders, которое
возвращает ссылку на объект типа Вorders,
связанный с границами данной таблицы.

Пример: назначение первой таблице
в документе оформление границ.

3.Строки и столбцы.

Таблица состоит из набора строк и
столбцов. Строки содержатся в семействе Rows, возвращаемое свойством Rows, а
столбцы – в семействе Columns, возврщаемое
свойством Columns.

Определенная строка или столбец связаны с объектами типа Row или Column. Доступ к конкретной строке или столбцу
осуществляется с помощью метода Item,
являющегося для объектов Rows  и Columns методом
по умолчанию.

Индексация столбцов и строк
начинается с единицы. Индекс «единица» получает первая сверху строка и крайний
левый столбец. Индекс последней строки и столбца можно получить с помощью
свойства Count, которое возвращает количество
членов   в коллекции.

Пример: выпадающее окно с
сообщением о количестве столбцов в таблице 1.

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

Для добавления в таблицу новых
строк (столбцов) используется метод Add.

Параметр Before
– указывает, перед какой строкой будет вставлена строка. Если параметр опущен,
то строка добавляется в конец таблицы.

Set tabv = ActiveDocument.Tables(1).Rows.Add(beforerow:=ActiveDocument.Tables(1).Rows(1))

Чтобы установить высоту строки,
используется метод SetHeight.

параметр RowHeight
указывает на новую высоту строки в пунктах.

WdRowHeightAtLeast
– размер, указанный в параметре RowHeigh, является
минимальным.

WdRowHeightAuto
— размер, указанный в параметре RowHeigh ,является
точным.

WdRowHeightExactly
– автоматический подбор высоты строк (параметр RowHeigh
игнорируется).

Получить информацию о текущей
ширине строки и правиле ее изменения можно с помощью свойств Height и HeightRule.

Параметр Height
(тип Single) позволяет задать необходимую высоту
строки в пунктах.

   wdRowHeightAtLeast
— минимальная ширина, которая может быть на­значена строке, указывается в
свойстве Height;

   wdRowHeightExactly
— ширина строки должна быть точно равна зна­чению, указанному в свойстве Height;

Using Excel VBA to create Microsoft Word documents

In these examples, we generate Microsoft Word Documents with various formatting features using
the Microsoft Excel VBA scripting language. These techniques can have many useful applications.
For instance if you have a list of data like a price or product list in Excel that you want to present
in a formatted Word Document, these techniques can prove useful.

In these examples, we assume the reader has at least basic knowledge of VBA, so we will not
go over basics of creating and running scripts. This code has been tested on Microsoft Word and Excel
2007. Some changes may be required for other versions of Word and Excel.

Writing to Word
Inserting a Table of Contents
Inserting Tabs
Inserting Tables
Inserting Bullet List
more on Inserting Tables
Multiple Features

Function that demonstrates VBA writing to a Microsoft Word document

The following code illustrates the use of VBA Word.Application object and related properties.
In this example, we create a new Word Document add some text.

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
	
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
            .Font.Bold = True
            .Font.Name = "arial"
            .Font.Size = 14
            .TypeText ("My Heading")
            .TypeParagraph            
        End With
    End With 

Some VBA Vocabulary

ParagraphFormat
Represents all the formatting for a paragraph.

output in MS Word:

Inserting a Table of Contents into Word Document using Excel VBA

In this example, we generate a Table of Contents into a Word Document using Excel VBA

Sub sAddTableOfContents()
    
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
	
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
    
    Dim wdDoc As Word.Document
    Set wdDoc = wdApp.Documents.Add
    
    ' Note we define a Word.range, as the default range wouled be an Excel range!
    Dim myWordRange As Word.range
    Dim Counter As Integer
    
    wdApp.Visible = True
    wdApp.Activate
    
    'Insert Some Headers
    With wdApp
        For Counter = 1 To 5
            .Selection.TypeParagraph
            .Selection.Style = "Heading 1"
            .Selection.TypeText "A Heading Level 1"
            .Selection.TypeParagraph
            .Selection.TypeText "Some details"
        Next
    End With

    ' We want to put table of contents at the top of the page
	Set myWordRange = wdApp.ActiveDocument.range(0, 0)
    
    wdApp.ActiveDocument.TablesOfContents.Add _
     range:=myWordRange, _
     UseFields:=False, _
     UseHeadingStyles:=True, _
     LowerHeadingLevel:=3, _
     UpperHeadingLevel:=1

End Sub

Some VBA Vocabulary

ActiveDocument.TablesOfContents.Add
The TablesOfContents property to return the TablesOfContents collection.
Use the Add method to add a table of contents to a document.

Some TablesOfContents Parameters

Range The range where you want the table of contents to appear. The table of contents replaces the range, if the range isn’t collapsed.

UseHeadingStyles True to use built-in heading styles to create the table of contents. The default value is True.

UpperHeadingLevel The starting heading level for the table of contents. Corresponds to the starting value used with the o switch for a Table of Contents (TOC) field. The default value is 1.

LowerHeadingLevel The ending heading level for the table of contents. Corresponds to the ending value used with the o switch for a Table of Contents (TOC) field. The default value is 9.

output Word Table in MS Word:

Write Microsoft Word Tabs

A function that writes tabbed content to a Microsoft Word Document. Note in each iteration, we change the
value of the leader character (characters that are inserted in the otherwise blank area created by the tab).

Public Sub sWriteMicrosoftTabs()

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
    
        For Counter = 1 To 3
            .Selection.TypeText Text:=Counter & " - Tab 1 "
            
            ' position to 2.5 inches
            .Selection.Paragraphs.TabStops.Add Position:=Application.InchesToPoints(2.5), _
                Leader:=Counter, Alignment:=wdAlignTabLeft
            
            .Selection.TypeText Text:=vbTab & " - Tab 2 "
            
            ' position to 5 inches
            .Selection.Paragraphs.TabStops.Add Position:=Application.InchesToPoints(5), _
                Leader:=Counter, Alignment:=wdAlignTabLeft
            
            .Selection.TypeText Text:=vbTab & " - Tab 3 "
                    
            .Selection.TypeParagraph
        Next Counter
        
    End With
End Sub

Some VBA Vocabulary

.TabStops.Add Use the TabStops property to return the TabStops collection. In the example above,
nprogram adds a tab stop positioned at 0, 2.5 and 5 inches.

output in MS Word:

Write Microsoft Word Tables

In this example, we generate a Microsoft Table using Excel VBA

Sub sWriteMSWordTable ()
 
    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        
        With .Selection
        
            .Tables.Add _
                    Range:=wdApp.Selection.Range, _
                    NumRows:=1, NumColumns:=3, _
                    DefaultTableBehavior:=wdWord9TableBehavior, _
                    AutoFitBehavior:=wdAutoFitContent
            
            For counter = 1 To 12
                .TypeText Text:="Cell " & counter
                If counter <> 12 Then
                    .MoveRight Unit:=wdCell
                End If
            Next
        
        End With
        
    End With

End Sub

Some VBA vocabulary

Table.AddTable object that represents a new, blank table added to a document.

Table.Add properties

Range The range where you want the table to appear. The table replaces the range, if the range isn’t collapsed.

NumRows The number of rows you want to include in the table.

NumColumns The number of columns you want to include in the table.

DefaultTableBehavior Sets a value that specifies whether Microsoft Word automatically resizes cells in tables to fit the cells� contents (AutoFit). Can be either of the following constants: wdWord8TableBehavior (AutoFit disabled) or wdWord9TableBehavior (AutoFit enabled). The default constant is wdWord8TableBehavior.

AutoFitBehavior Sets the AutoFit rules for how Word sizes tables. Can be one of the WdAutoFitBehavior constants.

output in MS Word:

Write Microsoft Word bullet list

In this example, we write with bullet list and outline numbers with Excel VBA

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
    
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        ' turn on bullets
        .ListGalleries(wdBulletGallery).ListTemplates(1).Name = ""
        .Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=.ListGalleries(wdBulletGallery).ListTemplates(1), _
            continuepreviouslist:=False, applyto:=wdListApplyToWholeList, defaultlistbehavior:=wdWord9ListBehavior
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .Font.Bold = False
            .Font.Name = "Century Gothic"
            .Font.Size = 12
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            .TypeParagraph
        End With
        
        ' turn off bullets
        .Selection.Range.ListFormat.RemoveNumbers wdBulletGallery
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            .TypeParagraph
            
        End With
        
        ' turn on outline numbers
        .ListGalleries(wdOutlineNumberGallery).ListTemplates(1).Name = ""
        .Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=.ListGalleries(wdOutlineNumberGallery).ListTemplates(1), _
            continuepreviouslist:=False, applyto:=wdListApplyToWholeList, defaultlistbehavior:=wdWord9ListBehavior
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            
        End With
        
    End With

output in MS Word:

Another example of Writing Tables to Microsoft Word

In this example we will create a word document with 20 paragraphs. Each paragraph will have a header with a header style element

    
   'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document

    Set wdApp = New Word.Application
    wdApp.Visible = True
    
    
    Dim x As Integer
    Dim y As Integer
    
    wdApp.Visible = True
    wdApp.Activate
    wdApp.Documents.Add
            
    wdApp.ActiveDocument.Tables.Add Range:=wdApp.Selection.Range, NumRows:=2, NumColumns:= _
        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
                
    With wdApp.Selection.Tables(1)
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
            
    With wdApp.Selection
        
        For x = 1 To 2
            ' set style name
            .Style = "Heading 1"
            .TypeText "Subject" & x
            .TypeParagraph
            .Style = "No Spacing"
            For y = 1 To 20
                .TypeText "paragraph text "
            Next y
            .TypeParagraph
        Next x
    
        ' new paragraph
        .TypeParagraph
        
        ' toggle bold on
        .Font.Bold = wdToggle
        .TypeText Text:="show some text in bold"
        .TypeParagraph
        
        'toggle bold off
        .Font.Bold = wdToggle
        .TypeText "show some text in regular front weight"
        .TypeParagraph
        
        
    End With
        
    

Some VBA vocabulary

TypeText

Inserts specified text at the beginning of the current selection. The selection is turned into an insertion point at the end of the inserted text.
If Options.ReplaceSelection = True then the original selection will be replaced. This behaves exactly the same as typing some text at the keyboard.

TypeParagraph

Insert a new blank paragraph. The selection is turned into an insertion point after the inserted paragraph mark. If Options.ReplaceSelection = True then the original selection will be replaced. This behaves exactly the same as pressing the Enter key.

output in MS Word:

Generating a Word table with VBA
	'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.

	Dim wdApp As Word.Application
	Dim wdDoc As Word.Document
	Dim r As Integer

	Set wdApp = CreateObject("Word.Application")
	wdApp.Visible = True

	Set wdDoc = wdApp.Documents.Add
	wdApp.Activate

	Dim wdTbl As Word.Table
	Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=5, NumColumns:=1)

	With wdTbl

		.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
		.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
		.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
		.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
		.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
		.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
		
		For r = 1 To 5
			.Cell(r, 1).Range.Text = ActiveSheet.Cells(r, 1).Value
		Next r
	End With

	

output in MS Word:

Option Explicit
Dim wdApp As Word.Application
 
Sub extractToWord()

   'In Tools > References, add reference to "Microsoft Word 12 Object Library" before running.
   
    Dim lastCell
    Dim rng As Range
    Dim row As Range
    Dim cell As Range
    Dim arrayOfColumns
    arrayOfColumns = Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
    Dim thisRow As Range
    Dim thisCell As Range
    Dim myStyle As String
    
    ' get last cell in column B
    lastCell = getLastCell()
    
    Set rng = Range("B2:H" & lastCell)
    
    'iterate through rows
    For Each thisRow In rng.Rows
            
        'iterate through cells in row row
        For Each thisCell In thisRow.Cells

            If thisCell.Value = arrayOfColumns(thisCell.Column) Or thisCell.Value = "" Then
            ' do nothing
                ''frWriteLine thisCell.Value, "Normal"
                ''frWriteLine arrayOfColumns(thisCell.Column), "Normal"
                  If thisCell.Value = arrayOfColumns(thisCell.Column) Or thisCell.Value = "" Then
                  End If
                  
            Else
                myStyle = "Normal"
                Select Case thisCell.Column
                    Case 2
                        myStyle = "Heading 1"
                    Case 3
                        myStyle = "Heading 2"
                    Case 4
                        myStyle = "Heading 3"
                    Case Is > 5
                        myStyle = "Normal"
                    
                End Select
                    
                frWriteLine thisCell.Value, myStyle
            End If
        
        arrayOfColumns(thisCell.Column) = thisCell.Value
    
      Next thisCell
    Next thisRow
    
End Sub

Public Function getLastCell() As Integer

    Dim lastRowNumber As Long
    Dim lastRowString As String
    Dim lastRowAddress As String
         
    With ActiveSheet
        getLastCell = .Cells(.Rows.Count, 2).End(xlUp).row
    End With
    
End Function

Public Function frWriteLine(someData As Variant, myStyle As String)
    
    If wdApp Is Nothing Then
        
        Set wdApp = New Word.Application
        With wdApp
            .Visible = True
            .Activate
            .Documents.Add
        End With
            
    End If
    
    With wdApp
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
            .Style = myStyle
            .TypeText (someData)
            .TypeParagraph
        End With
    End With
    
End Function

output in MS Word:

Понравилась статья? Поделить с друзьями:
  • Vba word text font
  • Vba word text find the
  • Vba word table width
  • Vba word table merge cells
  • Vba word table merge cell