如何使用 Word VBA 宏在列标题下方添加一行并向下移动现有行?
Posted
技术标签:
【中文标题】如何使用 Word VBA 宏在列标题下方添加一行并向下移动现有行?【英文标题】:How to add a row below the column header and move the existing row downwards using Word VBA Macros? 【发布时间】:2020-11-09 06:27:32 【问题描述】:每当我更新文档时,我都需要在表格顶部添加一行,就在标题下方,然后将旧行移动到下一个级别。该表格通常出现在 Word 文档的最后一页。请在附件中找到预期和实际行为的屏幕截图。 下面是我为实现而编写的代码:
-
转到最后一页并找到表格
添加一行(在列标题上方添加)
期望:
-
在列标题之后立即添加行并将现有行移至下一级
将日期添加到第二列。
Click for the screenshot
我的代码:
子宏1()
Selection.EndKey Unit:=wdStory
Dim theTable As Table
Dim theNewRow As Row
For Each theTable In ActiveDocument.Tables
Set theNewRow = theTable.Rows.Add(theTable.Rows.First)
'Other row formatting
Next theTable
结束子
我正在学习 VBA,任何帮助都会非常有用。感谢您的宝贵时间。
screenshot2
【问题讨论】:
【参考方案1】:正如 Intellisense 向您显示的那样,Table.Rows.Add
的输入参数是 [BeforeRow]
。这是一个可选参数,因此如果省略它,则在表格的最后一行之后添加新行。
由于您希望该行位于第一行之后和第二行之前,您需要将第二行作为参数传递,例如
With ActiveDocument.Tables(ActiveDocument.Tables.Count)
With .Rows.Add(.Rows(2))
'add date
.Cells(2).Range.Text = Format(Date, "MMMM d, yyyy")
'add any additional row formatting
End With
End With
【讨论】:
这就是我想要的。它工作:) 非常感谢 :)【参考方案2】:例如:
With ActiveDocument
With .Tables(.Tables.Count)
.Split (2)
With .Range.Characters.Last.Next
.FormattedText = .Next.Rows(1).Range.FormattedText
End With
.Rows(2).Range.Delete
End With
End With
不过,不清楚您所说的“将现有行移至下一级”是什么意思。
【讨论】:
嗯,在截图中,你可以看到已经有一行了。现在我需要在它上面添加一个新行。 确实需要提供前后截图。你的描述和单独的截图一清二楚。 我添加了另一个屏幕截图。我希望现在很清楚 你试过我贴的代码了吗?我在标题 之后添加了新行。您的“事后”镜头似乎显示了您使用代码得到的错误结果,而不是预期的结果......【参考方案3】:它需要下一步。
Sub test()
Selection.EndKey Unit:=wdStory
Dim theTable As Table
Dim theNewRow As Row
For Each theTable In ActiveDocument.Tables
Set theNewRow = theTable.Rows.Add(theTable.Rows.First.Next) '<~~ add next
'Other row formatting
Next theTable
End Sub
【讨论】:
不过,使用选择是不必要且低效的。此外,如果要修改的唯一表格是最后一个是文档,则循环是不合适的,正如 OP 的“表格通常出现在 Word 文档的最后一页”所建议的那样。 即使这样也有效。我有 3 个解决方案。谢谢,伙计们!以上是关于如何使用 Word VBA 宏在列标题下方添加一行并向下移动现有行?的主要内容,如果未能解决你的问题,请参考以下文章