-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
I checked it. It doesn't matter doing grammer check only or with spell check, or spell check only. There is no WORD running at the background. When I do the check (grammer or spell) in the first time, it is always ok. WORD disappeared. But, in the background, there is a WORD process. So when you check it in the second time, if the text has error (grammer or spell), the WORD will show up and do the check, but it will not become disappear when the check finished. There is a WORD window (no doc in it) at the bottom. Sometimes, this focus will not come back to the program which calls the checker class. This WORD window gets the focus (although it is minimized).
I think the problem is: the checker class didn't quit WORD correctly.
I changed the code:
[vb]
If KillMe = True Then
moApp.Visible = False
End If
[/vb]
to
[vb]
Dim Ret As Boolean = KillMe ' just use the property's Get
moApp.Visible = False
[/vb]
The WORD window won't show up (of course, :)), but the WORD process is still there, didn't quit. And sometimes, the spell checker window shows at below the current forum although it got focus.
I'm using winxp pro, vb express 2005 and XP_PIA_COMs (explained in #27).
I'll check more.
thanks
bear
Quote:
Originally Posted by RobDog888
Thanks.
Doing a grammer check only or together with a spell check?
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Is this on 2005 or 2003? In 2005 the GetObject function is flakey at best.
Edit: I see it is 2005. I may have to update the article for 2005 :(
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
I noticed that in debug mode, this happens 1 out of 3 times, but if I run the program in release mode, this does not happen very often, but it happens.
Right now, what I do is:
when spell checker is launched, I check the process, if WinWord existed, then I ask users save and quit it. Then, in program, I use
' ''If KillMe = True Then
' '' moApp.Visible = False
' ''End If
Code:
Try
moApp.Quit(False, Nothing, Nothing)
Catch ex As Exception
gcLog.LogInfo("WORD Quit Error!")
Finally
moApp = Nothing
End Try
instead of
Code:
If KillMe = True Then
moApp.Visible = False
End If
This way, the spell checker dlg always gets focus and stays at the top when it is called. The cons are:
users have to save & quit word before launch spell checker;
But I do have a question. When the spell checker is launched in the first time, it takes some time, since it needs lauch WORD. In the program I quit WORD. SO, I think when I launch spell checker in the second (or later) time (without quiting the program which launch spell checker), it SHOULD take some time too since it will launch WORD again. However, I found in the second time, it is very fast, just like WORD is launched already although I can't see the process WinWord.
Actually, fast is good, just feel weird. Maybe it has certain relation with the OS? I guess, :)
bear
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
No, if its not properly disposed of it will retain it in memory which is why the second run will be fast just like other second or subsequent runs. This is only for when there is an issue quitting word.
If you have it set so Word is destroyed each time with the KillMe = True, cause no running instance of Word was detected, then it will start up a new instance off Word and be slow. You can get over this by starting Word hidden when your app starts. Then it will just add docs and close docs as you spell check and be fast all the time. Then upon the app closing you kill that instance of Word.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
does it mean if the PC installed office 2007, then we have to use PIA for 2007 and recompile the program? if a PC installed PIA2007, and word 2002, will it work? how about on vista? anyone knows?
thanks
bear
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Yes an no. You need to have separate compiles for each of the Office versions you are going to support which will include changing your references etc and recompiling. There is no issue for Vista with this, only other issues like security, virtualizations and the UAC. All of which are unrelated to the PIAs and Office.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
RD ... can you post some instructions on how to implement your class into an existing project? Here's what I tried: I created a new module, then I pasted your class into that module. In my main code I tried to call the SpellMe function, but it's telling me that "SpellMe" is not declared.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Hi guys, i really hope this thread is still active, anyway...
This post is fantasic and the spellcheck works great. But it i need it to do just one little thing extra. I really hope you can help :)
Is it possible to specify where the Spelling options dialog will appear on the screen? At the moment it just deafults to the center of the screen but im using a multi headed system and so want the Spelling dialog to appear on a second screen.
When modifing the preferences...
Code:
'<PREP CHECK SPELLING OPTIONS DIALOG BOX (MODIFY TO YOUR PREFERENCES)>
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.CheckGrammarWithSpelling = True
is it possible to modify the dialogs position if so how?
Kind regards
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
RobDogg - great stuff. Has there been an 2008 update ?
What happens if the end user does not have MS-Office installed ?
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Thanks :)
Well this is setup with early binding but since its .NET you can include the PIAs to avoid that but you could also just change the code to Late binding and its already set to use a Try Catch for the existance of Word and message if they dont have it installed.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Quote:
Originally Posted by vbheadache
Hi guys, i really hope this thread is still active, anyway...
This post is fantasic and the spellcheck works great. But it i need it to do just one little thing extra. I really hope you can help :)
Is it possible to specify where the Spelling options dialog will appear on the screen? At the moment it just deafults to the center of the screen but im using a multi headed system and so want the Spelling dialog to appear on a second screen.
When modifing the preferences...
Code:
'<PREP CHECK SPELLING OPTIONS DIALOG BOX (MODIFY TO YOUR PREFERENCES)>
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.CheckGrammarWithSpelling = True
is it possible to modify the dialogs position if so how?
Kind regards
There is no built in abilities in Word to position the dialog so you may be able to subclass the dialog creation using Moeurs C++ dll and reposition it by changing its windowsplacement at that time.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Quote:
Originally Posted by nbrege
RD ... can you post some instructions on how to implement your class into an existing project? Here's what I tried: I created a new module, then I pasted your class into that module. In my main code I tried to call the SpellMe function, but it's telling me that "SpellMe" is not declared.
Just copy and paste all the code into a blank new class. If you look at my code you can see its a class and already named etc.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Quote:
Originally Posted by Xancholy
RobDogg - great stuff. Has there been an 2008 update ? ...
I suposse its time for an update/improvement. I have a few ideas on this but perhaps I'll update this soon as I am getting ready to write a few more FAQs again.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
RobDog888- This code looks great. However, I am getting the same errors CodeHammer did awhile back, yet I believe I have added the Reference to word, it does appear under references in the solution expolorer.
error: Type 'Word.Application' is not defined.
Suggests: Microsoft.Office.Interop.Word.Application
Other errors: Name "Word" not declared
Any suggestions? Thanks.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Ok, you may not have the .Interop installed on your system.
See the link in my sig - "Office Primary Interop Assemblies" that should resolve the errors.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Uh no Errors but Dialog not showing what do I have to put in my button! Im using VB2008!
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
I am getting an error on "Exit Function".
It says:
Function 'SpellMe' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
Code:
Friend Function SpellMe(ByVal msSpell As String) As String
Dim oDoc As Word.Document
Dim iWSE As Integer
Dim iWGE As Integer
Dim iResp As Integer
Dim sReplace As String
If msSpell = String.Empty Then Exit Function
Try
InitializeMe()
VS2008 3.5sp1
Option Explicit On
Option Strict On
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
That is not an error, it is a warning. It is warning you that the function SpellMe is not always returning a value. In this case, where you use Exit Function, there is no return value.
This doesn't need to be a hazard in your application, because you should always use appropriate null object checks. But if you don't do these checks, and use the result of this function directly, you may get an 'object reference not set' error.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Is this how I should be calling this?
VB Code:
Dim sp As New clsSpellMe
TextBox1.Text = sp.SpellMe(TextBox1.Text)
-
How to Keep the text formatting and other objects in rtb?
Hi,
How do I keep the text formatting after applying the spell check in a richtextbox? As it replaces the whole text, I am losing the text formatting and also other objects like images inside the richtextbox.
Is there a way to tell the spellcheck to look only in texts and update?
thanks,
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
RobDog ... will this work with Office 2007? Some of our users are SOMETIMES getting this error:
Call was rejected by callee. (Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)).
Do you know how I can fix this? Thanks...
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
I added the 12.0 version to the Select Case and am not experiencing any issues using it.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
to activate this :
1 what is needed to be installed/dl ?
2 what dll is to be referenced ?
how do i pass a string spell check it and get a : corrected string or 3 top correction strings options
(walkthrough) ?
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Quote:
Originally Posted by
moti barski
to activate this :
1 what is needed to be installed/dl ?
2 what dll is to be referenced ?
Nothing! The only mention of references I found was MS Word xx.0 Object Library is needs referencing for the VB6 version of the above code. Although, you could try referencing the MS Word xx.0 Object Library in the vb.net project and see what happens.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
It is all available as posted but...
1. Make a reference to Microsoft xx.x Object library.
2. Create a Windows project.
3. Add a text box
4. Add a command button.
5. Create the class.
Form logic:
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As New clsSpellMe
TextBox1.Text = x.SpellMe(TextBox1.Text)
End Sub
Class
Code:
Option Explicit On
Option Strict On
'Copyright © 2005 by RobDog888 (VB/Office Guru™). All Rights reserved.
'
'Distribution: You can freely use this code in your own
' applications provided that this copyright
' is left unchanged, but you may not reproduce
' or publish this code on any web site, online
' service, or distribute as source on any
' media without express permission.
'From http://www.vbforums.com/showthread.php?t=359879
Imports Microsoft.Office.Interop
Public Class clsSpellMe
Friend moApp As Word.Application
Private mbKillMe As Boolean
Friend Property KillMe() As Boolean
Get
InitializeMe()
KillMe = mbKillMe
End Get
Set(ByVal Value As Boolean)
mbKillMe = Value
End Set
End Property
Friend Sub InitializeMe()
Try
'<INITIALIZE WORD>
moApp = DirectCast(GetObject(, "Word.Application"), Word.Application)
Catch ex As Exception
If TypeName(moApp) = "Nothing" Then
moApp = DirectCast(CreateObject("Word.Application"), Word.Application)
mbKillMe = True
Else
MessageBox.Show(ex.Message, "VB/Office Guru™ SpellChecker™.NET", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Try
End Sub
Friend Function SpellMe(ByVal msSpell As String) As String
Dim oDoc As Word.Document
Dim iWSE As Integer
Dim iWGE As Integer
Dim iResp As Integer
Dim sReplace As String
If msSpell = String.Empty Then
SpellMe = ""
Exit Function
End If
Try
InitializeMe()
Select Case moApp.Version
Case "9.0", "10.0", "11.0", "12.0"
oDoc = moApp.Documents.Add(, , 1, True)
Case "8.0"
oDoc = moApp.Documents.Add
Case Else
MessageBox.Show("Unsupported Version of Word.", "VB/Office Guru™ SpellChecker™.NET", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
SpellMe = ""
Exit Function
End Select
oDoc.Words.First.InsertBefore(msSpell)
iWSE = oDoc.SpellingErrors.Count
iWGE = oDoc.GrammaticalErrors.Count
'<CHECK SPELLING AND GRAMMER DIALOG BOX>
If iWSE > 0 Or iWGE > 0 Then
'<HIDE MAIN WORD WINDOW>
moApp.Visible = False
If (moApp.WindowState = moApp.WindowState.wdWindowStateNormal) Or _
(moApp.WindowState = moApp.WindowState.wdWindowStateMaximize) Then
moApp.WindowState = moApp.WindowState.wdWindowStateMinimize
Else
moApp.WindowState = moApp.WindowState.wdWindowStateMinimize
End If
'</HIDE MAIN WORD WINDOW>
'<PREP CHECK SPELLING OPTIONS DIALOG BOX (MODIFY TO YOUR PREFERENCES)>
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.CheckGrammarWithSpelling = True
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.SuggestSpellingCorrections = True
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.IgnoreUppercase = True
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.IgnoreInternetAndFileAddresses = True
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.IgnoreMixedDigits = False
moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Application.Options.ShowReadabilityStatistics = False
'</PREP CHECK SPELLING OPTIONS DIALOG BOX (MODIFY TO YOUR PREFERENCES)>
'<DO ACTUAL SPELL CHECKING>
moApp.Visible = True
moApp.Activate()
iResp = moApp.Dialogs(Word.WdWordDialog.wdDialogToolsSpellingAndGrammar).Display
'</DO ACTUAL SPELL CHECKING>
If iResp < 0 Then
moApp.Visible = True
MessageBox.Show("Corrections Being Updated!", "VB/Office Guru™ SpellChecker™", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
oDoc.Select()
oDoc.Range.Copy()
sReplace = DirectCast(Clipboard.GetDataObject.GetData("System.String", True), String)
'<FIX FOR POSSIBLE EXTRA LINE BREAK AT END OF TEXT>
If (InStrRev(sReplace, Chr(13) & Chr(10))) = (Len(sReplace) - 1) Then
sReplace = Mid$(sReplace, 1, Len(sReplace) - 2)
End If
'</FIX FOR POSSIBLE EXTRA LINE BREAK AT END OF TEXT>
SpellMe = sReplace
ElseIf iResp = 0 Then
MessageBox.Show("Spelling Corrections Have Been Canceled!", "VB/Office Guru™ SpellChecker™.NET", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
SpellMe = msSpell
End If
Else
MessageBox.Show("No Spelling Errors Found" & Environment.NewLine & "Or No Suggestions Available!", _
"VB/Office Guru™ SpellChecker™.NET", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
SpellMe = msSpell
End If
'</CHECK SPELLING AND GRAMMER DIALOG BOX>
oDoc.Close(False)
oDoc = Nothing
'<HIDE WORD IF THERE ARE NO OTHER INSTANCES>
If KillMe = True Then
moApp.Visible = False
End If
'</HIDE WORD IF THERE ARE NO OTHER INSTANCES>
Catch ex As Exception
MessageBox.Show(ex.Message, "VB/Office Guru™ SpellChecker™.NET", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Function
End Class
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
I have a textbox on a continuous form with a memo field control source. On double click, the text box will open another form that has it's contents displayed in a larger view, with the option to spell check, modify the text in the field and then update and close, transferring the modified text back to the original textbox control.
I want to be able to run the grammar checker in word on this expanded form as well.
Any ideas? Any .mdbs already ready already?
P.S. Unfortunately, my office still uses ACCESS 2003 and will continue to do so for an indefinite amount of time...
:wave:
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Just preset in code what options you want before invoking the spelling dialog. Its shown in my first post. See line 78: '<PREP CHECK SPELLING OPTIONS DIALOG BOX (MODIFY TO YOUR PREFERENCES)>
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
It is amazing that so many have figured out how to use this although there isn't one mention anywhere as to how to call this class to start auto-checking text fields on a form. So, how is this accomplished?
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Because checking fields on a form is simply just passing the fields in a loop to the SpellMe function after you instantiate the clsSpellMe class. My initial example is just for one big "field" if you will. Its up to you how you want to call or utilize it for your own needs.
-
Re: Advanced VB/Office Guru™ Word SpellChecker™.NET
Hallo, not sure if this is still supported, I love the class but cannot get it to work for me. i added version 12.0 to my moApp.Versions.
Im using office 2007
I get the following error
TheAdd method or property is not available because the document is a rich text edit control..
hope I can get this going, its exactly what im looking for.
thanks