在只有一行的表格的第一行之后添加一行

时间:2019-01-18 11:50:10

标签: vba ms-word word-vba rows

我需要在MSWord Document的第一行之后添加一行。文档已经有一行和两列,其中第一个单元格中包含Country,第二个单元格中包含Partner作为两个单元格的值。以下代码的问题是它仅适用于至少两行。

宏应该能够在两列中添加行并写入预定义的字符串。可以通过两种方式完成

  1. 通过在表的末尾添加一行并到达该表并写入字符串。如果执行此操作,那么我的问题是如何到达表格的最后一行?

  2. 通过每次添加第二行,如以下代码中所述。

    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 :(得分:1)

也许我不太了解您的问题,但是当我打开Word文件并创建一个包含1行(作为标题)和2列的表并输入“ Country”和“ Partner”时,我可以在其中创建一个新行此代码如下表:

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是什么以及它来自何处。但是无论如何,您现在都可以使用此代码访问最后一个单元格。

答案 1 :(得分:1)

使用不带参数的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"