【问题标题】:Take a word from the document reference and use it to find and replace later in the document?从文档参考中取出一个单词,然后用它在文档中查找和替换?
【发布时间】:2015-12-14 19:18:30
【问题描述】:

我不精通 VBA,但想设置一个宏,用 Mocrosoft Word 2003 执行特定操作(是的,我的公司软件限制为 2003 - 不要问!)。

我有许多关于个人的文件。它们都以文档引用15/3/ARTF/(NAME) 开头,其中(NAME) 是个人的姓氏,例如15/3/ARTF/JONES

这些文档基于我创建的模板,上面写着“~Name~ 已通过她的导航考试”。

我如何设置一个宏来提取文档参考中的名称并找到~Name~ 并将其替换为该名称(在句子大小写中)?在显示的示例中,我希望在宏运行完成时让句子说“Jones 已通过她的导航考试”。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    假设文档引用是文档中的一个单独段落(也是第一个段落),您可以从它开始。如果它遵循您指定的格式,您只需找到最后一次出现的/,在找到的索引后面取名称并执行查找替换以替换所有出现的~Name~

    Sub ReplaceNames()
        Dim ref As String
        ref = ActiveDocument.Paragraphs(1).Range.Text
    
        Dim name As String
        name = Mid(ref, InStrRev(ref, "/") + 1)
    
        'If name ends with a paragraph, remove it.
        If Right(name, 1) = Chr(13) Then name = Left(name, Len(name) - 1)
    
        ActiveDocument.Range.Find.Execute "~Name~", MatchCase:=False, ReplaceWith:=name, Replace:=wdReplaceAll
    End Sub
    

    请注意,我已插入检查名称是否包含段落。您不希望新段落出现在整个文档中;-)

    【讨论】:

    • 谢谢,太好了。我假设我必须使用正则表达式函数,我希望它出现在句子大小写中?
    • 忽略我的最后一个,我有一个快速的谷歌并添加了以下内容:name = StrConv(name, vbProperCase)
    • 我没有完全理解你的问题。如果你只是想把名字的第一个字母大写,你可以name = UCase(Left(name, 1)) & Mid(LCase(name), 2)
    • @gridley123 这更简单。很公平:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多