【问题标题】:Adding a row after first row in a Table having only one row在只有一行的表中的第一行之后添加一行
【发布时间】:2019-01-18 11:50:09
【问题描述】:

我需要在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 看起来像这样:

要求:在宏之后应该是这样,添加单元格中的值。

更新答案:

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

【问题讨论】:

  • 把括号和里面的所有东西都去掉(注释掉),然后再试一次,只有Rows.Add
  • 添加行后,我需要在其中写入值如何完成。第一次 Doc 只有一行,但第二次运行宏 Document 将包含 2 行,依此类推。根据您的建议Rows.Add 我如何将值写入添加的行?
  • @CindyMeister 我重新表述我的问题,请看一下

标签: vba ms-word rows


【解决方案1】:

也许我不太明白你的问题,但是当我打开一个 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 是什么以及它来自哪里。但无论如何,您现在可以使用此代码访问最后一个单元格。

【讨论】:

  • 如果您在出现错误的行中删除此“(rng.Tables(1).Rows(2))”,那么它应该可以工作。 “rng.Tables(1).Rows.Add”就够了
  • 因为我正在使用范围,所以它不是ActiveDocument。一行作为标题,两列有“国家”“合作伙伴”已经写在文档中。
  • 1 - > 因为我正在使用范围,所以它不是ActiveDocument。 2- - > 一行作为标题,两列有“国家”“合作伙伴”已经写在文档中。 3 - - - >有没有办法写字符串而不加粗???
  • @IbneAshiq 记住:在 Stack Overflow 上,每个问题一个查询。请不要继续在 cmets 中扩展您的要求。针对新问题提出新问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 2011-01-28
    • 2017-03-06
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多