Word VBA大写单词的第一个字符问题

Posted

技术标签:

【中文标题】Word VBA大写单词的第一个字符问题【英文标题】:Word VBA uppercase first character of words issues 【发布时间】:2019-02-19 10:30:45 【问题描述】:

好的,假设我想将 Word 文档中选定范围内的单词中的第一个字符大写,但某些表达式除外。我有一个做类似事情的脚本,但我对某些表达式有疑问。在脚本中,我使用 Selection.Range.Case,但问题在于 URL 地址。我想将地址中的所有内容都保留为小写,但 Selection.Range.Case 将 URL 链接分解为多个字符串,例如:https、:、//、/ 等。该 URL 字符串的每个第一个字符都大写。选定的文本范围在编号列表中,并且 URL 是下一个编号项目之前的最后一件事。是否有一些解决方案可以在下一个编号项目之前将 http:// 或 https:// 之后的所有内容连接成一个字符串?谢谢。

【问题讨论】:

您需要提供一些示例文本,一个恰好选择了 WHAT 的示例,一些(最小)代码,代码给出的结果和预期的结果。我们可以用一些东西作为起点。这是非常模糊和笼统的。 【参考方案1】:

如果选定的文本范围仅在编号列表中,可以尝试这样的操作

Sub test()
Dim Pg As Paragraph, Pos As Long, Rng As Range

    For Each Pg In Selection.Paragraphs
        If Not Pg.Range.ListFormat.List Is Nothing Then  'Process only bulleted list
        PgTxt = Pg.Range.Text
        'Debug.Print PgTxt
        Pos = InStr(1, PgTxt, "http")
           If Pos <> 1 Then  'bypass if http found at start of List item then no Case Change
           If Pos > 1 Then Pos = Pos - 1        'http found some where within the List item
           If Pos = 0 Then Pos = Len(PgTxt)     ' if http not found in the list Item
           Set Rng = ActiveDocument.Range(Pg.Range.Start, Pg.Range.Start + Pos)
           Rng.Case = wdTitleWord
           End If
        End If
    Next
End Sub

【讨论】:

好的,我已经将它与我的代码合并,它工作得很好。谢谢。 感谢@Greedy 接受并让我的分数超过 1K。但是,尽管我介绍了两种情况 1. URL 位于列表项的末尾。 2 列表项中没有 URL。但我错过了第三点,即 URL 位于列表项的开头。尽管在您的情况下可能不需要特别要求。我正在编辑帖子以合并第三种情况。

以上是关于Word VBA大写单词的第一个字符问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中将字符串的每个单词的第一个字符大写? [复制]

尝试使用 forEach 将单词的第一个字符大写 [重复]

正则表达式删除第一个单词并使用 c# 将第二个单词的第一个字符大写

Java如何将每个单词的第一个字符转为大写?

如何大写字符串中每个单词的第一个字符

Java如何将每个单词的第一个字符转为大写