运行时出现问题,带if语句的下一个循环

问题描述

我试图在Word VBA中的if语句中使用for下一循环。该代码的目的是,如果Word文档的段落不为空,它将选择文本并将其复制并粘贴到新的Word文档中。如果该段为空,则将转到下一行。

我尝试运行代码,每次都只能选择整个Word文档中的第一段,而且我不确定如何让代码运行并转到下一段来创建循环。 / p>

   Sub selectparawithtext()
    
    Dim opara As Paragraphs
    Dim x As Integer 
    
    For x = 1 To 24
    
    If Paragraphs <> "" Then 

      Selection.Expand wdParagraph
      Selection.copy 
      Documents.Add wdNewBlankDocument
      Selection.PasteAndFormat (wdFormatOriginalFormatting)
    
    Else
      
      Selection.MoveDown Unit:=wdLine,Count:=1

    End If 
    Next 

    End Sub

解决方法

您有两个问题。

  1. 您不了解Word对象模型。
  2. 您已假定没有可见文本的段落的内容为空(“”),这是不正确的。

要解决1,您需要遍历要使用的故事范围中的段落。

Dim myPara As Paragraph
For Each myPara In ActiveDocument.StoryRanges(wdMainTextStory).Paragraphs
    <your code>
Next

文档正文中的段落有快捷方式(例如.contents.paragraphs或仅.paragraphs,但最好理解Word文档由多个故事范围组成,并指定与之相关的故事范围您想工作)。

第二点是单词段落以段落标记字符作为段落文本的一部分终止。因此,段落永远不能为空值,因为它们的最小长度始终为1个字符。

段落的文本是段落的范围对象的一部分。因此,要访问第x段的文本,您将使用

\<document qualifier>.\<storyrange qualifier>.paragraphs.item(x).range.text.

例如

ActiveDocument.StoryRanges(wdmaintextstory).paragraphs.item(x).range.text

值得注意的是,“ Item”是段落对象的默认属性,因此,为什么Paragraphs(x)和Paragraphs.Item(x)会给出相同的结果。