怎么让word里的英文标题,自动按实词虚词进行一键大小写转换?

LNX 20 信誉分
2026-01-28T06:59:32.7333333+00:00

如题。举例,我有一个标题:“Regulation (EU) 2018/848 of the European Parliament and of the Council of 30 May 2018 on organic production and labelling of organic products and repealing Council Regulation (EC) No 834/2007”,我想要按英文实词虚词的切换规律,转化成“Regulation (EU) 2018/848 of the European Parliament and of the Council of 30 May 2018 on Organic Production and Labelling of Organic Products and Repealing Council Regulation (EC) No 834/2007”。

请问如何在word上快速做到?目前基本上需要手动更改,或者借助第三方小工具,都不是很方便。谢谢。

Microsoft 365 和 Office | Office 在线服务器
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. Gabriel-N 13,660 信誉分 Microsoft 外部员工 仲裁人
    2026-01-28T08:00:04.0866667+00:00

    注:此回复已自动翻译。因此,它可能包含语法错误或表达尴尬。

    注意:请注意,本帖提供的截图仅适用于英文界面。对于需要或偏好中文界面的用户可能带来的任何不便,我深表歉意。如果您需要理解内容,我建议使用可靠的翻译工具或服务。

    你好 LNX

    感谢您联系问答论坛。

    如果您想使用 Word 的内置功能,可以使用 “每个单词首字母大写” (Capitalize Each Word) 功能,但它比较基础,无法自动识别并处理虚词(如 of, and, the, on)。

    用户的图像

    另一种方法是使用下方的 VBA 宏。这段代码设计为保留原本的大写单词(如 EUEC),同时将虚词转换为小写。

    Sub TitleCaseSmart()
        Dim ExcludeList As Variant
        Dim Words As Variant
        Dim i As Long, j As Long
        Dim IsExclude As Boolean
        Dim OriginalWord As String
        Dim CheckWord As String
        
        ' 定义需要保持小写的虚词列表
        ExcludeList = Array("a", "an", "the", "and", "but", "for", "nor", "or", "so", "yet", _
                            "at", "by", "for", "from", "in", "into", "of", "off", "on", _
                            "onto", "out", "over", "to", "up", "with", "as")
        
        If Selection.Type = wdSelectionNormal Then
            
            ' 保持原始大小写,以保护像 (EU) 这样的缩写词
            Words = Split(Trim(Selection.Text), " ")
            
            For i = 0 To UBound(Words)
                OriginalWord = Words(i)
                
                ' 创建一个全小写的副本,仅用于与虚词列表进行比对
                CheckWord = LCase(OriginalWord)
                
                IsExclude = False
                
                ' 检查该词是否在虚词列表中
                For j = 0 To UBound(ExcludeList)
                    If CheckWord = ExcludeList(j) Then
                        IsExclude = True
                        Exit For
                    End If
                Next j
                
                ' 逻辑处理:
                ' 1. 如果该词原本就是全大写(例如 EU, USA, (EC)),则保持原样
                If OriginalWord = UCase(OriginalWord) And Len(OriginalWord) > 1 And Not IsNumeric(OriginalWord) Then
                    Words(i) = OriginalWord 
                    
                ' 2. 如果是第一个词或最后一个词 -> 始终首字母大写
                ElseIf i = 0 Or i = UBound(Words) Then
                    Words(i) = UCase(Left(CheckWord, 1)) & Mid(CheckWord, 2)
                    
                ' 3. 如果是虚词(且不在句首句尾) -> 转为小写
                ElseIf IsExclude Then
                    Words(i) = CheckWord
                    
                ' 4. 其他所有单词 -> 首字母大写
                Else
                    Words(i) = UCase(Left(CheckWord, 1)) & Mid(CheckWord, 2)
                End If
                
            Next i
            
            ' 将处理后的文本写回文档
            Selection.Text = Join(Words, " ")
            
        Else
            MsgBox "请先选中一段英文标题!"
        End If
    End Sub
    
    

    使用方法:

    1. 打开 Word,按 Alt + F11 进入宏管理界面。
    2. 在菜单栏点击 “插入” (Insert) -> “模块” (Module)
    3. 将上面的代码复制并粘贴到弹出的空白窗口中。
    4. Ctrl + S 保存。注意:如果您的文档是 .docx 格式,Word 可能会提示您将其另存为“启用宏的文档” (.docm)。或者,您可以直接关闭 VBA 窗口,代码将保留在本地的 Normal 模板中,供其他文档使用。
    5. 选中您文档中的长英文标题,按 Alt + F8,选择 TitleCaseSmart,然后点击 “运行” (Run)

    小技巧: 如果您希望实现“一键操作”,可以考虑将此宏添加到 Word 顶部的快速访问工具栏 (Quick Access Toolbar)。设置完成后,只需选中文字并点击工具栏上的图标即可。

    用户的图像

    希望这些信息对你有所帮助。


    注意:如果您希望收到此线程的相关电子邮件通知,请按照我们的文档中的步骤启用电子邮件通知功能

    1 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。