Outlook VBA macro to Ignore Spelling Errors in Selected Block of Text

拜拜、爱过 提交于 2019-12-24 23:54:43

问题


When composing an email that contains a lot of programming terms I want my general spelling errors to show up with a red squiggle but it gets annoying when a lot of special words also show as errors. I can run through the spell check and tell it to 'Ignore All' for each spelling incident and the red squiggles will go away. Then as I continue composing the message the spell check continues to work on new edits.

What I'd like to do is create a VBA macro that will do this for me in the selected text or the entire message body (I don't have a preference). I'm an experienced Access VBA developer but not too familiar with the Spell Check object model in Outlook.

My idea for this came from the free Microsoft OneNote Onetastic add-in and the "No Spell Check" macro. It would be great to be able to do this in Outlook.


回答1:


It seems easier (and at least possible) to clear the entire message body as opposed to selected text; this should hopefully give you some inspiration.

Note that, assuming you already have spelling errors, the message body is not immediately cleared with ShowSpellingErrors = False. Toggling the language is a quick hack, but was straightforward and simple. More ideas here.

Option Explicit

Sub Test()

' Add a reference to the Microsoft Word Object Library for this to compile
Dim oDoc As Word.Document
Dim oMail As Outlook.MailItem

If TypeOf Application.ActiveInspector.CurrentItem Is Outlook.MailItem Then
    Set oMail = Application.ActiveInspector.CurrentItem
Else
    Exit Sub
End If

Set oDoc = oMail.GetInspector.WordEditor

If Not (oDoc Is Nothing) Then
    oDoc.ShowSpellingErrors = False

    ' Toggling the language forces a recheck of the body, to clear red squiggles
    oDoc.Range.LanguageID = wdAfrikaans
    oDoc.Range.LanguageID = wdEnglishUS
End If

End Sub



回答2:


With a kick start from BigBen I was able to answer this question. I gave him the check mark but this is the function I think answers my question. (Edit: now that I see how this response is laid out I checked this answer.)

Public Sub **ClearSpellCheckSquiggles**()
' Remove the red squiggles from the current document because they may be distracting
' while composing a message with a lot special words (like code).
' New text added after this runs will still be checked and indicated by red squiggles.

    ' This assumes that you also have Word installed on your box. If so, you can
    ' access most of the Word OM from the Outlook VBE *without* referencing Word
    ' by using the ActiveInspector.WordEditor object.
    Dim oDoc As Object ' Word.Document  ' Or add a reference to the Microsoft Word Object Library for IntelliSense
    Dim oMail As Outlook.MailItem

    If TypeOf Application.ActiveInspector.CurrentItem Is Outlook.MailItem Then
        Set oMail = Application.ActiveInspector.CurrentItem
    Else
        Exit Sub
    End If

    Set oDoc = oMail.GetInspector.WordEditor

    If Not (oDoc Is Nothing) Then

        ' Mark the current document as already spell-checked:
        oDoc.SpellingChecked = True

        ' Mark the current document as already grammar-checked (green squiggles):
        oDoc.GrammarChecked = True

    End If

End Sub

If you want to add this function to your message toolbar, open the Quick Access Toolbar when you have a message window open (not the main Outlook window). Follow the arrows in the image below.




回答3:


Thank you for your answer, this has helped me alot

Another option is to toggle the DISPLAY of checking of gram/spelling as you type options

below is just 3 lines different to your answer, 3rd line refreshes the the word 'application' (editor).

I use these 3 lines in a macro button within Word itself

oDoc.Application.Options.CheckGrammarWithSpelling = Not oDoc.Application.Options.CheckGrammarWithSpelling
oDoc.Application.Options.CheckSpellingAsYouType = Not oDoc.Application.Options.CheckSpellingAsYouType
oDoc.Application.ScreenRefresh

full macro below

Public Sub ClearSpellCheckSquiggles()
' Remove the red squiggles from the current document because they may be distracting
' while composing a message with a lot special words (like code).
' New text added after this runs will still be checked and indicated by red squiggles.

    ' This assumes that you also have Word installed on your box. If so, you can
    ' access most of the Word OM from the Outlook VBE *without* referencing Word
    ' by using the ActiveInspector.WordEditor object.
    Dim oDoc As Word.Document   ' Or add a reference to the Microsoft Word Object Library for IntelliSense
    Dim oMail As Outlook.MailItem

    If TypeOf Application.ActiveInspector.CurrentItem Is Outlook.MailItem Then
        Set oMail = Application.ActiveInspector.CurrentItem
    Else
        Exit Sub
    End If

    Set oDoc = oMail.GetInspector.WordEditor

    If Not (oDoc Is Nothing) Then

'        ' Mark the current document as already spell-checked:
'        oDoc.SpellingChecked = True
'
'        ' Mark the current document as already grammar-checked (green squiggles):
'        oDoc.GrammarChecked = True
    oDoc.Application.Options.CheckGrammarWithSpelling = Not oDoc.Application.Options.CheckGrammarWithSpelling
    oDoc.Application.Options.CheckSpellingAsYouType = Not oDoc.Application.Options.CheckSpellingAsYouType
    oDoc.Application.ScreenRefresh
    End If

End Sub


来源:https://stackoverflow.com/questions/49803910/outlook-vba-macro-to-ignore-spelling-errors-in-selected-block-of-text

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!