首页 > 解决方案 > VBA WORD循环遍历句子和句子行

问题描述

这甚至可能吗?

编辑:解释我自己,并以另一种方式思考

我可以循环遍历字母、单词和段落,但没有想到我认为应该是句子,也找不到任何关于行的参考。

作为一张千言万语的图,我附上一张图来解释一下自己:

以颜色作为提及的句子示例,图像作为链接,因为它是我的第一篇文章

我的目的是突出/标记/着色那些不适合单个页面宽度的线条,例如黄色正方形。但不知道应该怎么做我无法实现简单的事件。

有什么帮助吗?(在这里和其他地方搜索了几个小时但没有成功)

If False Then   ' Cool, letter by letter
    With ActiveDocument
                     For i = 1 To .Characters.Count
                                  .Characters(i).Font.Color = Int(Rnd * 1048576)
                            Next
                    End With
    End If
                       
                    
                    
If False Then  ' Cool, word by word
    With ActiveDocument
                     For i = 1 To .Words.Count
                                  .Words(i).Font.Color = Int(Rnd * 1048576)
                            Next
                    End With
    End If



If False Then  ' :-(  same as paragraph
    With ActiveDocument
                     For i = 1 To .Sentences.Count
                                  .Sentences(i).Font.Color = Int(Rnd * 1048576)
                             Next
                  End With
   End If
    

If True Then ' Cool, paragraph by paragraph
    With ActiveDocument
                     For i = 1 To .Paragraphs.Count
                                  .Paragraphs(i).Range.Sentences(1).Font.Color = Int(Rnd * 1048576)
                             Next
                   End With
    End If

注意+添加:解释我自己,并以另一种方式思考

正如下面的某些人所说的那样,我自己解释说,总体目的是识别“不适合一个打印行的文本行”。如果有兴趣,它与写诗有关。我想我也可以尝试在打印线上“定位每个字符”,识别“line-brake”字符(Word 不考虑刹车语句),并逐字/逐字母手动着色。但我也没有在字符对象上找到一个引用打印视图中位置的属性。

标签: vbams-wordformatting

解决方案


可能可以优化,但这有效!,,(感谢John Korchok)

For Each p In ActiveDocument.Paragraphs
    first_word_of_paragraph = True
    
    For Each w In p.Range.Words
        If first_word_of_paragraph = True Then
            first_word_of_paragraph = False
            actual_line_vertical_start = w.Information(wdVerticalPositionRelativeToPage)
            End If
        
        If first_word_of_sentence = True Then
            first_word_of_sentence = False
            actual_line_vertical_start = w.Information(wdVerticalPositionRelativeToPage)
            End If
            
        If w.Text = "" Then
            first_word_of_sentence = True
            End If
            
        If actual_line_vertical_start <> w.Information(wdVerticalPositionRelativeToPage) Then
            w.HighlightColorIndex = wdRed
            End If

推荐阅读