Vba 替换保留原始大小写的单词

Vba 替换保留原始大小写的单词,vba,ms-word,case-sensitive,Vba,Ms Word,Case Sensitive,我正在制作一个程序来替换MS Word文档中的单词。我想保留单词的原始大小写 比如说,有一句话:“碎玻璃”。我想把它改成“Cristal Roto” 我有两个文本框,输入和输出。 输入是替换术语的地方,输出是替换输入术语的单词 对于这个例子,我将把“碎玻璃”放在(输入)文本框中,“Cristal Roto”放在(输出)文本框中 Word文档中的结果将是“Cristal roto”。第二个单词的第一个字母被小写 Dim rng As Word.Range rng=objWordS.ActiveDo

我正在制作一个程序来替换MS Word文档中的单词。我想保留单词的原始大小写

比如说,有一句话:“碎玻璃”。我想把它改成“Cristal Roto”

我有两个文本框,输入和输出。
输入是替换术语的地方,输出是替换输入术语的单词

对于这个例子,我将把“碎玻璃”放在(输入)文本框中,“Cristal Roto”放在(输出)文本框中

Word文档中的结果将是“Cristal roto”。第二个单词的第一个字母被小写

Dim rng As Word.Range
rng=objWordS.ActiveDocument.Content
用rng.Find
.ClearFormatting()
.Execute(FindText:=Input.Text_
替换为:=Output.Text_
MatchWholeWord:=真_
替换:=Word.WdReplace.wdReplaceAll)
以
我只关心每个单词的第一个字母的大小写

编辑
“碎玻璃”最终成为“Cristal roto”的原因是我没有添加以下内容:

.Replacement.ClearFormatting()
我在
.ClearFormatting
.Execute
之间添加了它

现在,Word文件中的文本替换为我在输出文本框中使用的大小写。
尽管如此,我还是想知道是否有一种方法可以检测word文件中原始单词的大小写,在不使用正确大小写的情况下自动调整输出文本框的文本。所以:

要替换:“碎玻璃”-替换文本:“cristal roto”-所需结果:“cristal roto”。

在执行搜索时尝试解析
输出。文本
ProperCase
。像这样的方法应该会奏效:

ReplaceWith:=StrConv(Output.Text,vbProperCase)


又短又干净。但是您仍然必须使用
ProperCase
,不知道这是否符合您的需要

Dim rng As Word.Range
        rng = objWordS.ActiveDocument.Content
        With rng.Find
            .ClearFormatting()
            .Replacement.ClearFormatting()
            .Execute(FindText:=InputText)
            If rng.Text = rng.Text.Substring(0, 1).ToLower() + rng.Text.Substring(1) Then
                .Execute(ReplaceWith:=Output.Text.Substring(0, 1).ToLower() + Output.Text.Substring(1).ToLower, _
                         MatchWholeWord:=True, _
                         Replace:=Word.WdReplace.wdReplaceAll)
            End If
            If rng.Text = rng.Text.Substring(0, 1).ToUpper() + rng.Text.Substring(1) Then
                .Execute(ReplaceWith:=Output.Text, _
                         MatchWholeWord:=True, _
                         Replace:=Word.WdReplace.wdReplaceAll)
            End If
        End With
这样,我就不必每次都手动更改大小写,这样做可以根据单词的第一个字符是大写字母还是小写字母来替换它。如果是大写,则文本将替换为输出中使用的大小写(例如,破窗)

如果它是小写的,那么它将替换输出内容的小写单词(例如,breakedwindow)。通过这种方法,我将来可能能够实现新的条件,比如“如果第一个单词的第一个字母是大写的,但是第二个单词的第一个字母是小写的,那么……”。我希望这对其他人也有用

实际上,我甚至可以使用适当的大小写实现一个条件,以实现我在主要问题的编辑下所要求的


谢谢你的时间和帮助

每次都一样吗?我的意思是,您需要将所有单词单独大写吗?您可能必须手动解析返回的文本,然后替换大写。@3vts我主要希望在替换表达式时,它停止将第二个单词的第一个字符转换为小写。把“暗室”改为“Habitación Oscura”,而不是“Habitación Oscura”,这是我现在在替换时得到的。通过将此代码添加到文本框修改后的Text:Dim ProperSizeWords作为字符串ProperSizeWords=StrConv(Output.Text,VbStrConv.ProperCase),您可以将“Replacewith:=Output.Text”更改为“Replacewith:=ProperSizeWord”,从而达到此目标,如果你想用小写字母等替换它,你必须总是关闭它/切换到其他方法。在你的代码中,它总是大写第一个字母,并且为了我使用它的目的,我只是有时候需要这样做,我只是忘了在主帖子中提到这一点!但我也将使用您发布的示例,比如smg:If rng.Text=StrConv(rng.Text,vbProperCase)Then.Execute(replacement:=StrConv(Output.Text,vbProperCase),u感谢您的回答和宝贵的时间!