【问题标题】:MS Word VBA: How to replace each word with its translation while keeping formattingMS Word VBA:如何在保持格式的同时用翻译替换每个单词
【发布时间】:2012-10-08 15:11:06
【问题描述】:

我有一个 word 文档,想用翻译替换每个单词,同时保持所有格式不变。我不能使用“查找和替换”对话框,因为我没有尝试替换一组特定的单词,而是替换了所有单词。如何使用 VBA 做到这一点?

更新 我正在使用 Word 2010。到目前为止,我可以使用 ActiveDocument.Range.Words 属性遍历单词,但我不知道如何用它的翻译替换这些单词?在替换时,我想保留所有格式,如字体名称、大小、颜色、背景颜色、下划线、粗体,简而言之,所有格式选项都保持原样。

【问题讨论】:

  • 您需要提供更多详细信息才能获得任何有用的答案,请参阅the FAQ。您使用的是什么版本的 Word?你试过什么了?任何代码示例?等等。
  • 如果您循环访问 ActiveDocument.Range.Words,您可以一次替换一个单词;但是请注意,如果您这样做,每个单词将采用该单词的 第一个字符 的格式。如果单词在其中具有不同的格式(例如,单词的最后一个字母带有下划线),那么该格式将丢失。

标签: vba ms-word


【解决方案1】:

我猜你有一个单词数组 ("apple", "book", "cat") 和它们的翻译数组 ("pomme", "livre", "chat")

您的目标是逐个批量更改单词。

所以你需要一个循环。这是可能有帮助的循环(如果我正确理解您的问题)。

批量更改两个数组

Option Explicit
Sub replaceArrayForArray()
'
'to create array use prefix\suffix and replacing tool http://textmechanic.com/
'
'
findArray = Array("apple", "book", "cat")
replArray = Array("pomme", "livre", "chat")

For i = 0 To UBound(findArray)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = findArray(i)
        .Replacement.Text = replArray(i)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute replace:=wdReplaceAll
Next i
End Sub

如果您使用 图形 并且您必须批量更改图形而不重叠,则可能会遇到更困难的问题。此处或多或少描述了使用相同宏的方法:MS Word Macro to increment all numbers in word document

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多