#1
|
|||
|
|||
Spell Check TextBox in UserForm
I've been searching other forums and posts looking for a suitable vba example to spell check text within a userform textbox. I located a post from 2003 that had the most effective solution (I had to make one modification to get it to work): Code:
Private Sub cmdSpellCheck_Click() 'Spell check certain fields in a UserForm 'Adapted from http://computer-programming-forum.com/1-vba/3853759c12e8d3ae.htm 'By Ann K Bohma, Bra Utbildning AB, Sweden 'Create a new document Dim oDoc2 As Document Set oDoc2 = Documents.Add With oDoc2 'Set language and style (can be omitted) '.Styles(wdStyleNormal).LanguageID = wdEnglish '.Range.Style = wdStyleNormal DoSpellCheck TextBox1 'etc etc or Loop all controls checking for textcontrols .SpellingChecked = True 'can be omitted, .Close wdDoNotSaveChanges End With MsgBox "Spelling and Grammar Check Complete" End Sub Private Sub DoSpellCheck(oTxtBox As Control) Dim oRng As Range Dim strText As String With oTxtBox If Not .Value = "" And Not .Value = "<WhatEver>" Then Set oRng = oDoc2.Range oRng = .Value With oRng .CheckSpelling AlwaysSuggest:=True .CheckGrammar 'I added grammar to the code from the post 'Set the range eliminating the last CR/Enter .SetRange .Start, .End - 1 End With 'Return data to the Userform .Value = oRng.Text End If End With End Sub Last edited by rjmiller; 06-13-2018 at 01:45 PM. Reason: Changed "Set oRng = ActiveDocument.Range" to "oDoc2.Range" - as suggested by Guessed |
#2
|
||||
|
||||
Since you created a document variable as part of the parent sub, you should have passed that document to the DoSpellCheck so you wouldn't need to use ActiveDocument instead.
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
#3
|
|||
|
|||
Error Handling and Document Focus
Added Error Handling as sometimes the temp file doesn't close and added a variable to maintain the focus on the original document:
Code:
Private Sub cmdSpellCheck_Click() 'Spell check certain fields in a UserForm 'Adapted from http://computer-programming-forum.com/1-vba/3853759c12e8d3ae.htm 'By Ann K Bohma, Bra Utbildning AB, Sweden Dim sActiveDoc As String sActiveDoc = ActiveDocument.Name 'maintain focus on the active document 'Create a new document Dim oDoc2 As Document Set oDoc2 = Documents.Add On Error Resume Next With oDoc2 'Set language and style (can be omitted) '.Styles(wdStyleNormal).LanguageID = wdEnglish '.Range.Style = wdStyleNormal DoSpellCheck TextBox1 'etc etc or Loop all controls checking for textcontrols .SpellingChecked = True 'can be omitted, .Close wdDoNotSaveChanges End With Documents(sActiveDoc).Activate MsgBox "Spelling and Grammar Check Complete" End Sub Private Sub DoSpellCheck(oTxtBox As Control) Dim oRng As Range Dim strText As String With oTxtBox If Not .Value = "" And Not .Value = "<WhatEver>" Then Set oRng = oDoc2.Range oRng = .Value With oRng .CheckSpelling AlwaysSuggest:=True .CheckGrammar 'I added grammar to the code from the post 'Set the range eliminating the last CR/Enter .SetRange .Start, .End - 1 End With 'Return data to the Userform .Value = oRng.Text End If End With End Sub |
#4
|
|||
|
|||
Closing the temp document
I have been using this code successfully with the exception of the temporary document created. It will not close. Any help would be much appreciated.
Code:
Private Sub cmdSpellCheck_Click() 'Spell check certain fields in a UserForm 'Adapted from http://computer-programming-forum.com/1-vba/3853759c12e8d3ae.htm 'By Ann K Bohma, Bra Utbildning AB, Sweden 'Create a new document Dim sActiveDoc As String sActiveDoc = ActiveDocument.Name On Error Resume Next Dim oDoc2 As Document Set oDoc2 = Documents.Add With oDoc2 DoSpellCheck TextBox1 'etc etc or Loop all controls checking for textcontrols .SpellingChecked = True 'can be omitted, MsgBox "Spelling and Grammar Check Complete" .Close SaveChanges:=wdDoNotSaveChanges End With lbl_Exit: Exit Sub Set oDoc2 = Nothing End Sub Public Sub DoSpellCheck(oTxtBox As Control) Dim oRng As Range Dim strText As String With oTxtBox If Not .Value = "" And Not .Value = "<WhatEver>" Then Set oRng = ActiveDocument.Range oRng = .Value With oRng .CheckSpelling AlwaysSuggest:=True .CheckGrammar 'Set the range eliminating the last CR/Enter .SetRange .Start, .End - 1 End With 'Return data to the Userform .Value = oRng.Text ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges End If End With Exit Sub End Sub |
#5
|
||||
|
||||
Undoubtedly by using activedocument rather than the document names you have applied, the code is losing track of which document is which. The folllowing should address it:
Code:
Option Explicit Private Sub cmdSpellCheck_Click() DoSpellCheck TextBox1 MsgBox "Spelling and Grammar Check Complete" lbl_Exit: Exit Sub End Sub Public Sub DoSpellCheck(oTxtBox As Control) Dim oDoc2 As Document Dim oRng As Range Set oDoc2 = Documents.Add With oTxtBox If Not .value = "" And Not .value = "<WhatEver>" Then Set oRng = oDoc2.Range oRng = .value With oRng .SpellingChecked = False .CheckSpelling AlwaysSuggest:=True .CheckGrammar .End = .End - 1 End With 'Return data to the Userform .value = oRng.Text oDoc2.Close SaveChanges:=wdDoNotSaveChanges End If End With Set oDoc2 = Nothing Exit Sub End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#6
|
|||
|
|||
Thank you for your response. I receive a run-time error 4198 . If I comment out the "SaveChanges:=wdDoNotSaveChanges" I still get the run-time error. In either case I can leave the file open in the background and the user can close it after they are finished with the primary doc. I'd prefer that the end user have no idea that the temp file even exists and that it just closes. Thank you for simplifying the code. It makes it more efficient for reuse through out the document( I have three userforms on average that I spell check within the doc). If you have any other suggestion I'd appreciate it. Thanks
|
#7
|
||||
|
||||
Try it with a couple of little changes
Code:
Option Explicit Private Sub cmdSpellCheck_Click() DoSpellCheck TextBox1 MsgBox "Spelling and Grammar Check Complete" lbl_Exit: Exit Sub End Sub Public Sub DoSpellCheck(oTxtBox As Control) Dim oDoc2 As Document, oRng As Range With oTxtBox If Not .value = "" And Not .value = "<WhatEver>" Then Set oDoc2 = Documents.Add Set oRng = oDoc2.Range oRng = .value With oRng .SpellingChecked = False .CheckSpelling AlwaysSuggest:=True .CheckGrammar .End = .End - 1 End With 'Return data to the Userform .value = oRng.Text oDoc2.Saved = True oDoc2.Close SaveChanges:=wdDoNotSaveChanges Set oDoc2 = Nothing End If End With End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
UserForm textbox exit event activated with navigation buttons...why? help? | orozvik@yahoo.com | Excel Programming | 2 | 05-08-2015 02:50 AM |
Can't use RTF Textbox in Userform (Word2007) | dherr | Word VBA | 2 | 03-16-2015 07:50 AM |
Userform VBA Textbox Calculation | MarkAn | Word VBA | 2 | 08-15-2014 06:50 AM |
Number format in Textbox on userform | officeclerk | Excel Programming | 2 | 04-17-2012 01:23 AM |
Spell Check | WorkerB | Word | 2 | 11-21-2009 07:22 AM |