I cannot take credit for this routine, as the bulk of it comes courtesy of Microsoft. It utilizes the Spell Checker in Microsoft Word, and contains a couple of interesting techniques that I have not used before. One is the CoAllowSetForegroundWindow call, which enables the COM server process called to take focus away from the client
application. The other is moving the Word window off screen by setting the top of the window to a large negative number. This prevents it from interfering with the client program. I have tested it with Word 9.0 and word 12.0, and I have implemented it as a module for portability.
J.A. Coutts
application. The other is moving the Word window off screen by setting the top of the window to a large negative number. This prevents it from interfering with the client program. I have tested it with Word 9.0 and word 12.0, and I have implemented it as a module for portability.
J.A. Coutts
Code:
Attribute VB_Name = "modSpell"
Option Explicit
Declare Function CoAllowSetForegroundWindow Lib "ole32.dll" (ByVal pUnk As Object, ByVal lpvReserved As Long) As Long
Public Function SpellChk() As String
Dim WordApp As Object
Dim objDoc As Object 'Word.Document
Dim lOrigTop As Long
Dim lErr As Long
On Error GoTo SpellChkErr
' Create a Word document object
Set WordApp = CreateObject("Word.Application")
CoAllowSetForegroundWindow WordApp, 0
Set objDoc = WordApp.Documents.Add
' Position Word off screen to avoid having document visible
lOrigTop = WordApp.Top
WordApp.WindowState = 0
WordApp.Top = -3000
WordApp.Visible = True
WordApp.Activate
' Assign the text to the document and check spelling
With objDoc
.Content.Paste
.Activate
.CheckSpelling
' After the user has made changes, use the clipboard to
' transfer the contents back to the text box
.Content.Copy
SpellChk = Clipboard.GetText(vbCFText)
' Close the document and exit Word
.Saved = True
.Close
End With
Set objDoc = Nothing
WordApp.Visible = False
WordApp.Top = lOrigTop
WordApp.Quit
Set WordApp = Nothing
Exit Function
SpellChkErr:
lErr = err
SpellChk = Clipboard.GetText(vbCFText)
Screen.MousePointer = vbNormal
Select Case lErr
Case 91, 429
MsgBox "MS Word cannot be found!", vbExclamation
Case Else
MsgBox "Error: " & err & " - " & Error$(err), vbExclamation, App.ProductName
End Select
End Function
'Calling routine
Private Sub cmdSpell_Click()
Clipboard.Clear
Clipboard.SetText txtMessage.Text
txtMessage.Text = SpellChk()
End Sub