RE: How to save message before the spelling start ?

From: Eric Legault [MVP - Outlook] (elegaultZZZ_at_REMOVEZZZmvps.org)
Date: 03/08/05


Date: Tue, 8 Mar 2005 07:49:18 -0800

1) You don't need to define a variable set to the Outlook.Application object
in VBA code; you can use the intrinsic Application object without a new
variable required, and you don't need to instantiate it.

2) This will fail if the current Inspector is not a MailItem, as objItem is
declared as a MailItem object:

Set objItem = objInspector.CurrentItem
If objItem.Class = olMail And _...

Check objInspector.CurrentItem.Class before setting your objItem variable.

3) I don't know what is happening with your ctrl object. Where are you
calling that procedure? During the Item_Send event?

--
Eric Legault - B.A, MCP, MCSD, Outlook MVP
--------------------------------------------------
{Private e-mails ignored}
Job: http://www.imaginets.com
Blog: http://blogs.officezealot.com/legault/
"Bragu" wrote:
> Hi, 
> 
> I tried also this way (see code) but I get the Automation Error.
> What I can do to skip this error ? I have already certificate my macro and 
> setted the certificate as trusted.
> 
> 
> Sub mySend()
>     Dim objApp As Outlook.Application
>     Dim objInspector As Outlook.Inspector
>     Dim objItem As MailItem
>     Dim strRecipName As String
>     Dim flgErr As Integer
>     Dim ctrl As CommandBarControl
>     
>     flgErr = 0
>     On Error GoTo errHandler
>     Set objApp = CreateObject("Outlook.Application")
>     Set objInspector = objApp.ActiveInspector
>     If Not TypeName(objInspector) = "Nothing" Then
>        Set objItem = objInspector.CurrentItem
>        If objItem.Class = olMail And _
>           objItem.Sent = False Then
>             objItem.Save
>             'send  ==== the next line return an automation Error !!!!
>             Set ctrl = Application.ActiveInspector.CommandBars.FindControl(, 
> 2617)
>             ctrl.Execute
>        End If
>     End If
>     Set objItem = Nothing
>     Set objInspector = Nothing
>     Set objApp = Nothing
>     Exit Sub
> errHandler:
>     Select Case flgErr
>     Case 1:
>         MsgBox "Il messaggio è stato salvato ma non è stato possibile 
> eseguire il controllo ortografico", vbInformation, "Check Mail"
>     Case 287:
>         MsgBox "Mail non spedito come da vostra scelta.", vbInformation, 
> "Check Mail"
>     Case Else
>         MsgBox "Errore : " & "(" & Err.Number & ")" & vbCrLf & 
> Err.Description, vbCritical, "Errore nel controllo/invio mail"
>     End Select
> 
> End Sub
> 
> 
> 
> 
> "Bragu" wrote:
> 
> > Hi Eric,
> > 
> > I had already tryed what you suggest:  trap the send event, but this event 
> > is rised after the spellchecking has runned so for me it's to late --> maybe 
> > the outlook as already crashed.
> > 
> > As you say I could repaire my office installation but the problem exist on > 
> > 100 PC of my Company so if I found a workround will be better.
> > 
> > Do you know if there is a way to Know the answer a the spellcheker question: 
> > "The spelling check was stopped before it finished. Do you want to send 
> > anyay?" when you stop the spell check?
> > If I can trap this I resolve my problem using the code I posted and modifing 
> > the function:
> > 
> > Function CheckSpelling()
> > ' SpellChecker ID = 2
> > 
> >     Dim ctrl As CommandBarControl
> > '    Set cbrMenuBar = Application.ActiveInspector.CommandBars '("Standard")
> >  '   cbrMenuBar.FindControl(, 2).Execute
> >     Set ctrl = Application.ActiveInspector.CommandBars.FindControl(, 2)
> >     If ctrl.Enabled Then  
> >          ctrl.Execute '==== How trap the spelling cancel button ?
> >     End If
> > End Function
> > 
> > 
> > "Eric Legault [MVP - Outlook]" wrote:
> > 
> > > Outlook provides no hooks into the spell checking event.
> > > 
> > > If you want to ensure that messages are saved before sending, one way to do 
> > > this without code is to turn on the AutoSave option in Advanced E-mail 
> > > Options.
> > > 
> > > BTW, the Send event is firing after the spell check is run because the user 
> > > has clicked Send, which runs spell check first if it is turned on.
> > > 
> > > If you must use code, simply trap the Send event for all new e-mails and 
> > > call the Item.Save event.  See this article on how to hook into this:
> > > 
> > > Getting a Handle on Your E-mails with VBA: 
> > > http://blogs.officezealot.com/legault/articles/2224.aspx
> > > 
> > > If Outlook is crashing with no code running because of the spell check, you 
> > > might want to try running Detect and Repair in Office Setup.
> > > 
> > > --
> > > Eric Legault - B.A, MCP, MCSD, Outlook MVP
> > > --------------------------------------------------
> > > {Private e-mails ignored}
> > > Job: http://www.imaginets.com
> > > Blog: http://blogs.officezealot.com/legault/
> > > 
> > > "Bragu" wrote:
> > > 
> > > > We have a problem: if we have setted the option to spell the mail before 
> > > > sending the outlook, sometimes, crash and we lose the mail.
> > > > 
> > > > I want to write a macro that save the mail before sending, so if the 
> > > > application crash we don't lose the mail.
> > > > But the event send of MailItem is rised after the spelling it's runned.
> > > > Is there any way to save it before the spelling start ?
> > > > 
> > > > I wrote a macro (copy from explamples on internet) that work we commandbars 
> > > > button (see Sub SaveSpellSend attached ) but it's not a nice way because if 
> > > > somebody stop the spell checking  the mail will be sended anyway.
> > > > 
> > > > Thank's for any help ... and sorry for my english
> > > > 
> > > > ps: Our system are w2k/ xp with office 2000 SR1 multilanguage pack with all 
> > > > the last fix installed.
> > > > 
> > > > 
> > > > 
> > > > 
> > > > Sub SaveSpellSend()
> > > >     Dim objApp As Outlook.Application
> > > >     Dim objInspector As Outlook.Inspector
> > > >     Dim objItem As MailItem
> > > >     Dim strRecipName As String
> > > >     Dim flgErr As Integer
> > > >     
> > > >     flgErr = 0
> > > >     On Error GoTo errHandler
> > > >     Set objApp = CreateObject("Outlook.Application")
> > > >     Set objInspector = objApp.ActiveInspector
> > > >     If Not TypeName(objInspector) = "Nothing" Then
> > > >        Set objItem = objInspector.CurrentItem
> > > >        If objItem.Class = olMail And _
> > > >           objItem.Sent = False Then
> > > >             objItem.Save
> > > >             flgErr = 1
> > > >             If CheckSpelling Then
> > > >                 objItem.Send
> > > >              Else
> > > >              MsgBox "Per poter eseguire il controllo ortografico il cursore 
> > > > deve trovarsi nel body", vbExclamation
> > > >             End If
> > > >        End If
> > > >     End If
> > > >     Set objItem = Nothing
> > > >     Set objInspector = Nothing
> > > >     Set objApp = Nothing
> > > >     Exit Sub
> > > > errHandler:
> > > >     Select Case flgErr
> > > >     Case 1:
> > > >         MsgBox "Il messaggio è stato salvato ma non è stato possibile 
> > > > eseguire il controllo ortografico", vbInformation, "Check Mail"
> > > >     Case 287:
> > > >         MsgBox "Mail non spedito come da vostra scelta.", vbInformation, 
> > > > "Check Mail"
> > > >     Case Else
> > > >         MsgBox "Errore : " & "(" & Err.Number & ")" & vbCrLf & 
> > > > Err.Description, vbCritical, "Errore nel controllo/invio mail"
> > > >     End Select
> > > > 
> > > > End Sub
> > > > 
> > > > 
> > > > 
> > > > 
> > > >