簡體   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