Automatically Replace Misspellings with Suggestion

2019-07-13 03:54发布

I have a long list of terms. Over 90% are misspellings. Most of which are two words that have no space in the middle. I noticed that MS Word, Excel, Office, etc. is pretty good at suggesting the correct spelling. When I run the spellchecker, I don't have time to confirm each and every suggested correction. Having some errors are OK.

How can I automate spellcheck, or rather "spellcorrect" without prompting? I don't mind using other tools besides Microsoft, but it's spellchecker seems pretty good. I tried some VBA code to use with Excel, but I can't find anything that will programmatically show me the main suggestion so that I can replace the misspelled term.

Sub spellcheck()


    With Application.SpellingOptions
        .SuggestMainOnly = True
        .IgnoreCaps = True
        .
    End With

    Cells.CheckSpelling

End Sub

Any help is appreciated. And please I understand the danger of auto-correct. The impact of wrongful corrections is minimal.

Thanks, Steve

3条回答
叛逆
2楼-- · 2019-07-13 04:54

It's been more than a year, but maybe you still need the solution to the problem.
Try this (in ms word):

Sub use_suggestion()  
Dim rng As Range  
Dim i As Long  

For i = 1 To ActiveDocument.Range.SpellingErrors.Count  
Set rng = ActiveDocument.Range.SpellingErrors(i)  

If rng.GetSpellingSuggestions.Count <> 0 Then  
rng = rng.GetSpellingSuggestions.Item(1).Name & "ZXQ"  
End If  

Next i  

Selection.HomeKey Unit:=wdStory  
Selection.Find.ClearFormatting  
Selection.Find.Replacement.ClearFormatting  

   With Selection.Find  
     .Text = "ZXQ"  
     .Replacement.Text = ""  
     .Forward = True  
     .Wrap = wdFindContinue  

   End With  

   Selection.Find.Execute Replace:=wdReplaceAll  
End Sub  

Note: the misspelled words that have no suggestion will not change.

查看更多
Anthone
3楼-- · 2019-07-13 04:56

A third party spell checker, such as aspell might give you the most speed & flexibility. But apparently, you can control the spell checker of Access, so that might be a possibility.

Given your special case of errors being due to lack of space between two words though, you may be able to get by with Excel's spell checker:

Sub test()
    Dim str, correction As String
    Dim i As Long, n As Long

    With Application
    For Each str In Array("pancake", "sausagebiscuit", "oatmeal", "largecoffee")
      correction = str ' by default leave alone
      If .CheckSpelling(str) Then
        ' already a word
      Else
        n = Len(str)
        For i = 1 To n
          If .CheckSpelling(Left$(str, i)) And .CheckSpelling(Right$(str, n - i)) Then
            correction = Left$(str, i) & " " & Right$(str, n - i)
          End If
        Next
      End If
      Debug.Print str & " -> " & correction
    Next
    End With
End Sub

Output:

pancake -> pancake
sausagebiscuit -> sausage biscuit
oatmeal -> oatmeal
largecoffee -> large coffee

Mmmm, breakfast....

查看更多
疯言疯语
4楼-- · 2019-07-13 04:59

Assuming that you have a list of misspelled words in column A (starting in row 1) and their corrections in column B, you can use this macro to add them the Office's Autocorrect library. This way, Excel will replace the word with its correction right after the word is entered.

Sub subAddAutoCorrects()
    Dim rng As Range
    Set rng = Sheets("Sheet1").Range("A1")

    While rng  ""
        Application.AutoCorrect.AddReplacement What:=rng.Value, Replacement:=rng.Offset(, 1).Value
        Set rng = rng.Offset(1)
    Wend
End Sub
查看更多
登录 后发表回答