【问题标题】:VBA WORD looping trought sentences and lines of sentecesVBA WORD循环遍历句子和句子行
【发布时间】:2021-01-05 19:46:33
【问题描述】:

这可能吗?

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

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

作为一张千言万语的图,我附上一张图说明一下自己:

  • 以黑色为正方形的文本示例
  • 我用下面的代码成功了
  • 红色方格,我知道该怎么做

example of sentences coloured as mention, image as link as it is my first post

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

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

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

NOTE + ADDs:解释我自己,并以另一种方式思考

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

【问题讨论】:

  • 句子不是 Word VBA 对象。行更不用说,因为“行”取决于文本的特定显示,如果字体更改,则可以轻松更改。如果您说明您要达到的总体目标,这将有所帮助,因为您对如何实现该目标的假设可能存在缺陷。
  • «句子不是 Word VBA 对象。» Word VBA 具有句子属性,但它与语法句子几乎没有共同之处。例如,考虑以下情况:Mr.史密斯在约翰博士的杂货店花了 1,234.56 美元购买: 10.25 公斤土豆; 10公斤鳄梨;和15.1公斤格林夫人的Mt. Pleasant澳洲坚果。 对你我来说,这就是一句话;对于 VBA,它算作 5 个句子。
  • @JohnKorchok,是的,我知道这取决于显示设置、纸张大小、字体大小等...是的,但这意味着它根本无法从 VBA 访问?
  • @macropod 也谢谢你,那么单词上的句子是什么?,每个“简单句子”,类似于那些用分号、点或其他标点符号分隔的 f?
  • 整体范围,如上一张图片所示,以识别不适合印刷线的“句子”(如果古玩,它与写诗有关)

标签: vba ms-word formatting


【解决方案1】:

也许可以优化,但这可行!!,,(感谢 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多