繁体   English   中英

运行时出现问题,使用 if 语句进行下一个循环

[英]Problem when running for, next loop with if statement

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

我试过运行代码,每次它只能选择整个 Word 文档中的第一段,我不确定如何让代码运行并继续下一段以创建循环。

   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) 似乎给出了相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM