首页 > 解决方案 > VBA 宏检查之前添加的单词,之后添加拼写错误的单词以进行建议的更正

问题描述

用例:我正在使用语音听写软件给自己做笔记,然后粘贴到 MS-Word 中。该软件做得不错,但会破坏一些单词,导致很多拼写错误。其中第一类基本上是同音异义词,主要是技术术语。我构建了一个很好的 VBA 宏,它使用查找和替换,从电子表格中提取同音词和所需的更正。效果很好。类别 2 更难解决,并且主要由拼写错误组成,因为软件将随机空格插入到其他拼写正确的单词中。我没有看到明确的模式,就像总是在音节中断或双字母之间一样,但它经常发生在一个或多个音节是一个正确拼写的单词,而另一个音节被切断,并且单独的那个不是一个有效的单词。例如 转录“类别”与“类别”。正确的部分可以是前半部分或后半部分。

代码需要:

结果将是这样的:

编码以纠正由于空格引起的拼写错误 -> 编码以纠正由于空格引起的拼写错误

我知道如何调用拼写检查、循环遍历范围、获取拼写建议等,但我正在努力确定如何识别上一个和下一个单词,然后在原始拼写检查会话中再次运行拼写检查。

Sub SpellCheck()
Dim Rng As Range, oSuggestions As Variant
For Each Rng In ActiveDocument.Range.SpellingErrors
  With Rng
    If .GetSpellingSuggestions.Count > 0 Then
      
' TBD

  End If
  End With
Next
End Sub

有什么建议么?我愿意接受一定程度的误报或必须手动更正的单词。只是修复上述代表性示例的东西将是巨大的。非常感谢!

标签: vbams-word

解决方案


也许:

Sub SpellCheck()
Dim Rng As Range, oSuggestions As Variant
For Each Rng In ActiveDocument.Range.SpellingErrors
  With Rng
    If .Characters.First.Previous = " " Then
      .Characters.First.Previous.Delete
      .Start = .Words.First.Start
      If .SpellingErrors.Count > 0 Then
        ActiveDocument.Undo
        If .Characters.Last.Next = " " Then
          .Characters.Last.Next.Delete
          .End = .Words.Last.End
          If .SpellingErrors.Count > 0 Then ActiveDocument.Undo
        End If
      End If
    End If
  End With
Next
End Sub

推荐阅读