Добавление строки после первой строки в таблице, имеющей только одну строку - PullRequest
0 голосов
/ 18 января 2019

Мне нужно добавить строку после первой строки в MSWord Document. В документе уже есть одна строка и два столбца, содержащие Country в первой ячейке и Partner во второй ячейке в качестве значений обеих ячеек. Проблема со следующим кодом заключается в том, что он работает не менее чем с двумя строками.

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

  1. Добавив строку в конце таблицы, дойдя до нее и написав строки. Если я сделаю это, тогда мой вопрос: как мне добраться до последней строки таблицы?

  2. Путем добавления второй строки Everytime, как указано в следующем коде.

    Set doc = Documents.Open("C:\Users\dell\Desktop\LATAM.DOCX", , , , , , , , , , , True)
    Set rng = doc.Content
    rng.Tables(1).Rows.Add (rng.Tables(1).Rows(2)) 'Here I am getting error 'required memeber of collect not exist.
    
    Set Cell = rng.Tables(1).Cell(2, 1)
    Set Cell2 = rng.Tables(1).Cell(2, 2)
    Cell.Range.Text = UT
    
    If UT = "CROATIA" Then Cell2.Range.Text = "ERSTE SECURITIES ZAGREB"
    If UT = "CZECH REPUBLIC" Then Cell2.Range.Text = "ERSTE GROUP"
    

Latam.docx выглядит так:

enter image description here

Требование : после макроса должно быть так со значениями в добавленных ячейках.

enter image description here

ОБНОВЛЕННЫЙ ОТВЕТ:

Set doc = Documents.Open("C:\Users\ibnea\Desktop\List of Countries & Companies CEEMEA & LATAM.DOCX", , , , , , , , , , , True)
Set rng = doc.Content.Tables(1).Rows.Add
rng.Range.Font.Bold = False
rng.Cells(1).Range = UT
rng.Cells(2).Range = UT2

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Используйте Rows.Add без параметра, и новая строка будет вставлена ​​в конец таблицы. Параметр (как указано в разделе справки для Rows.Add позволяет коду вставлять новые строки перед определенной строкой.

Чтобы работать с новой строкой, объявите переменную объекта и назначьте ей строку при ее создании. Это также хорошая идея сделать это с объектом Table. Таким образом, можно обращаться к объектам напрямую, вместо того, чтобы постоянно использовать что-то вроде rng.Tables(index).Rows(index), это не только упрощает чтение и запись, но и выполняет быстрее.

Итак, исходя из кода в вопросе моя рекомендация:

Dim tbl as Word.Table, rw as Word.Row
Set tbl = rng.Tables(1)
Set rw = tbl.Rows.Add
rw.Cells(1).Range.Text = "cell content"
rw.Cells(2).Range.Text = "other cell content"
0 голосов
/ 18 января 2019

Может быть, я не совсем понимаю ваш вопрос, но когда я открою файл Word и создаю таблицу с 1 строкой (в качестве заголовка) и 2 столбцами и введу «Страна» и «Партнер», тогда я смогу создать новую строку в эта таблица с этим кодом:

Option Explicit

Sub addRow()
Dim tbl As Table

'set tble variable to Table with Index 1 in your document
Set tbl = ActiveDocument.Tables(1)

'add a row to this table at the end
tbl.Rows.Add

'get last row in this table
Dim lastRow As Variant
lastRow = ActiveDocument.Tables(1).Rows.Count

'write to the last row
ActiveDocument.Tables(1).Cell(lastRow, 1).Range = "your value in last row / column 1"
ActiveDocument.Tables(1).Cell(lastRow, 2).Range = "your value in last row / column 2"


End Sub

Вы сказали, что в вашем списке только одна строка. Этот код теперь добавляет строку и заполняет в столбцах 1 и 2 значение, которое находится справа от знака равенства. До сих пор неясно, что такое UT и откуда он взялся. Но в любом случае вы можете получить доступ к последним ячейкам с помощью этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...