Расположение таблицы в определенном месте в документе Word с использованием VBA

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

Кажется, я не могу найти способ указать таблице точно (x,y), где мне нужно, чтобы она появилась. Поскольку в документе нет ничего, кроме текста, на него нет ссылок.

Я также пытаюсь избежать использования элементов управления Active X, если это вообще возможно.

2 ответа

Этот код добавит таблицу с тремя столбцами и одной строкой между вторым и третьим абзацами.

Sub InsertTable()

    Dim tbl As Table
    Dim pg As Paragraph

    With ThisDocument
        'Add a new paragraph that the table will replace
        Set pg = .Paragraphs.Add(.Paragraphs(3).Range)
        'Add a table in place of the new paragraph
        Set tbl = .Tables.Add(pg.Range, 1, 3)
    End With

    tbl.Columns(1).Cells(1).Range.Text = "123 Main St"
    tbl.Columns(2).Cells(1).Range.Text = "City"
    tbl.Columns(3).Cells(1).Range.Text = "State"
    tbl.Rows.LeftIndent = 41

End Sub

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

tbl.Rows.HorizontalPosition = 150 'In points
tbl.Rows.VerticalPosition = 200

Надеюсь, что это помогло.

У меня возникли проблемы с пониманием кода с оператором with из ответа Дика Куслейки, поэтому я хотел бы поделиться своей версией без оператора with, для таких людей, как я, гораздо проще понять:

Sub InsertTable()

Dim tbl As Table
Dim pg As Paragraph

'Add a new paragraph that the table will replace
Set pg = ThisDocument.Paragraphs.Add(ThisDocument.Paragraphs(3).Range)
'Add a table in place of the new paragraph
Set tbl = ThisDocument.Tables.Add(pg.Range, 1, 3)

tbl.Columns(1).Cells(1).Range.Text = "123 Main St"
tbl.Columns(2).Cells(1).Range.Text = "City"
tbl.Columns(3).Cells(1).Range.Text = "State"
tbl.Rows.LeftIndent = 41

End Sub
Другие вопросы по тегам