【问题标题】:VBA replacing text not keeping the replacement text's formatting and randomly applying uppercase formattingVBA替换文本不保留替换文本的格式并随机应用大写格式
【发布时间】:2020-03-25 23:41:11
【问题描述】:

我正在尝试使此代码正常工作,但它会随机将我尝试替换“ID”的整个句子大写。我正在使用 ID00 数字替换文本。有时替换将全部大写。我无法弄清楚如何保持外壳应有的状态。 一个例子是:ID001 被替换为“这是一个例子。我想要这个”。它这样做:“这是一个例子。我想要这个。”

With Selection.Find
.ClearFormatting


chunks = Round(Len(replace) / 250, 0)                   
If Len(replace) Mod 250 > 0 Then chunks = chunks + 1      
If chunks = 1 Then
    .Execute FindText:=search, ReplaceWith:=replace, replace:=wdReplaceAll
Else

    .Execute FindText:=search, ReplaceWith:="{1}", replace:=wdReplaceAll

    ' Replace the text in chunks of less than 255 characters
    For i = 1 To chunks


        chunk = Mid(replace, ((i - 1) * 250) + 1, 250)


        If i < chunks Then chunk = chunk & "{" & (i + 1) & "}"

        .Execute FindText:="{" & i & "}", ReplaceWith:=chunk, replace:=wdReplaceAll
    Next i

End If

结束

【问题讨论】:

  • 请提供一些用于测试的示例文本以及“好”和“坏”结果的示例,以便我们理解。
  • 我已经编辑了原件以包含一个示例。基本上,它只是将替换文本中的每个字母大写。它似乎只发生在我拥有的某些短语上。不知道为什么。
  • 如果代码使用Selection.Find 而不是Range.Find,则查找将使用上次在查找/替换对话框中使用的设置。可能,ALL CAPS 格式已用于替换并影响结果?在其中粘贴Replacement.ClearFormatting 可能是个好主意。和/或修改代码以使用 FindRange 对象。

标签: vba ms-word


【解决方案1】:

尝试使用 MatchCase:=False。例如:

.Execute FindText:=search, ReplaceWith:=replace, MatchCase:=False, Replace:=wdReplaceAll

【讨论】:

    【解决方案2】:

    我知道这是一个旧帖子,但我遇到了同样的问题.. 玩了一段时间后,这对我有帮助。

    我尝试在替换文本上不使用任何格式,并且特定格式不是全部大写 - 仍然全部大写..

    我发现,如果我搜索的整个文本都是大写的,它会将其全部更改为大写。如果搜索文本中的第一个字母为大写,则替换文本中的第一个字母为大写。无论您使用哪种格式。

    我有一个名为“C-PTFE CIP”的文本,并希望在某些情况下添加额外的内容,结果全部大写。我的解决方法是添加更多文本“ix C-PTFE CIP”,然后将“ix”添加到我的替换文本中。现在一切都如我所愿,不仅全部小写,而且如我所愿。

    因此,对于您的情况,如果可能,请将“ID”更改为“id”,或者如果您像我一样幸运,可以添加更多文本。

    希望这可以在将来对其他人有所帮助。我不知道为什么格式不会覆盖搜索到的文本。也许文档中的其他设置?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-19
      • 2014-11-06
      • 1970-01-01
      • 2022-01-16
      • 2020-03-23
      • 2019-01-22
      • 1970-01-01
      • 2014-04-07
      相关资源
      最近更新 更多