将 MS Word 中的段落计数转换为可用于循环的变量

将 MS Word 中的段落计数转换为可用于循环的变量

我有一个宏,它从文档 A 中提取选定数量的文本,将其粘贴到文档 B 中,轮询 Word 以获取文档 B 中的段落总数,然后对文档 B 中的文本执行例程,当例程完成后,将修改后的文本复制回文档 A。执行此操作时,它会在文档中留下 AI 想要删除的文本残余。(宏的相关部分发布如下)宏确定段落数,然后根据文档 B 中的段落数删除文档 A 中的一定数量的表格行。我在线收到错误,这让我很困惑。我的代码有什么问题?

Sub info3()
Selection.WholeStory
Dim k As Integer

Dim AD As Document
Dim DP As Object

Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties

' Returns the number of paragraphs and lines in a document.
MsgBox "There are " & DP("Number Of Paragraphs") & _
  " paragraphs containing text " & "and " & DP("Number Of Lines") & _
  " lines counted."
  'top of page
Selection.HomeKey Unit:=wdStory
'remove a row from a table an amount of times determined by # of paragraphs
' if 8 paragraphs detected, do this procedure 4 times.
'following line gets an error statement. Why?
Do Until k > (DP / 2)
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub

答案1

DP 是一个对象,而不是数字,所以你不能除以 2。你需要将段落数存储在一个新变量中

Dim numParagraphs as Integer

numParagraphs = DP("Number Paragraphs")

并在循环中使用它。

此外,您还混合了表格和文本属性。是表属性,您需要在表内才能删除行。此外,您必须使用索引来访问特定行。例如

Selection.Rows(1).Delete

您可以使用以下命令清除选定的文本:

Selection.Text = ""

但我不知道这是否是您想要实现的。

答案2

MS 网站上的一位评论者帮助我解决了这个问题......

Dim k As Integer
Dim AD As Document
Dim DP As Object
Dim LP As Long
Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties
LP = DP("Number Of Paragraphs") / 2

Selection.HomeKey Unit:=wdStory

' if 8 paragraphs detected, do this procedure 4 times.

Do Until k > LP
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub

相关内容