A Microsoft Outlook email forum. Outlook Banter

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » Outlook Banter forum » Microsoft Outlook Email Newsgroups » Outlook and VBA
Site Map Home Register Authors List Search Today's Posts Mark Forums Read Web Partners

Outlook 2007 - Error Inserting Text into Received E-mail



 
 
Thread Tools Search this Thread Display Modes
  #1  
Old October 12th 07, 07:37 PM posted to microsoft.public.outlook.program_vba
Chris Weirup
external usenet poster
 
Posts: 1
Default Outlook 2007 - Error Inserting Text into Received E-mail

I have a VBA macro for handling e-mail attachments in Outlook 2007 (based on
the version from Nicola Delfino). The macro saves any attachments in an
e-mail highlighted in the Inbox, then deletes them, and finally adds a line
of text into the original e-mail with the path where the file saves (see code
below). The macro handles the first two tasks fine, but then I receive the
following error when I try to add the text to the message:

Error Number: 4605
Error Description: This method or property is not available because the
document is locked for editing.

This happens when the text is being inserted into the e-mail message. When
I'm debugging the code, I've noticed that many of the WordEditor properties
are locked and unavailable. How do I unlock the underlying Word.Document
properties and add the text?

Thanks!
- Chris

CODE:
Public Sub StripAttachments()

Dim objOL As Outlook.Application
Dim objMsg As Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim i As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolder As String
Dim result

On Error GoTo StripAttachments_err

result = MsgBox("Do you want to remove attachments from selected
email(s)?", vbYesNo + vbQuestion)
If result = vbNo Then
Exit Sub
End If

' Instantiate an Outlook Application object.
' Set objOL = CreateObject("Outlook.Application")
Set objOL = Application
' Get the collection of selected objects.
Set objSelection = objOL.ActiveExplorer.Selection

' Set the folder to save attachements
' Need a better way of doing this - maybe dialog box
strFolder = "D:\Data\Outlook_Attachments\"

' Check each selected item for attachments.
' If attachments exist, save them to the Temp
' folder and strip them from the item.
For Each objMsg In objSelection
' This code only strips attachments from mail items.
If objMsg.Class = olMail Then
' Get the Attachments collection of the item.
Set objAttachments = objMsg.Attachments
lngCount = objAttachments.Count
If lngCount 0 Then
' We need to use a count down loop for
' removing items from a collection. Otherwise,
' the loop counter gets confused and only every
' other item is removed.
strFile = ""
For i = lngCount To 1 Step -1
' Get the file name.
strFile = strFile & strFolder &
objAttachments.Item(i).FileName

' Save the attachment as a file.
objAttachments.Item(i).SaveAsFile strFile

' Delete the attachment.
objAttachments.Item(i).Delete
Next i

Dim objDoc As Object
Dim objInsp As Outlook.Inspector
Set objInsp = objMsg.GetInspector
Set objDoc = objInsp.WordEditor

objDoc.Characters(1).InsertBefore strFile
objDoc.Save

End If
End If
Next

ExitSub:
Set objDoc = Nothing
Set objInsp = Nothing
Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing

Exit Sub

StripAttachments_err:
MsgBox "An unexpected error has occurred." _
& vbCrLf & "Please note and report the following information." _
& vbCrLf & "Macro Name: StripAttachments" _
& vbCrLf & "Error Number: " & Err.Number _
& vbCrLf & "Error Description: " & Err.Description _
& vbCrLf & "Error Source: " & Err.Source _
, vbCritical, "Error!"

GoTo ExitSub
End Sub

Ads
  #2  
Old October 13th 07, 06:52 PM posted to microsoft.public.outlook.program_vba
Ken Slovak - [MVP - Outlook]
external usenet poster
 
Posts: 5,848
Default Outlook 2007 - Error Inserting Text into Received E-mail

There are issues with things not working in WordMail 2007 and even more
things don't work if Word and Outlook are from different SKU's or from
certain versions of Office. See the discussion of WordMail limitations on
the page of issues for developers at www.outlookcode.com.

You might have to find a different way of doing what you want or it might
not be doable.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Chris Weirup" Chris wrote in message
...
I have a VBA macro for handling e-mail attachments in Outlook 2007 (based
on
the version from Nicola Delfino). The macro saves any attachments in an
e-mail highlighted in the Inbox, then deletes them, and finally adds a
line
of text into the original e-mail with the path where the file saves (see
code
below). The macro handles the first two tasks fine, but then I receive the
following error when I try to add the text to the message:

Error Number: 4605
Error Description: This method or property is not available because the
document is locked for editing.

This happens when the text is being inserted into the e-mail message. When
I'm debugging the code, I've noticed that many of the WordEditor
properties
are locked and unavailable. How do I unlock the underlying Word.Document
properties and add the text?

Thanks!
- Chris

CODE:
Public Sub StripAttachments()

Dim objOL As Outlook.Application
Dim objMsg As Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim i As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolder As String
Dim result

On Error GoTo StripAttachments_err

result = MsgBox("Do you want to remove attachments from selected
email(s)?", vbYesNo + vbQuestion)
If result = vbNo Then
Exit Sub
End If

' Instantiate an Outlook Application object.
' Set objOL = CreateObject("Outlook.Application")
Set objOL = Application
' Get the collection of selected objects.
Set objSelection = objOL.ActiveExplorer.Selection

' Set the folder to save attachements
' Need a better way of doing this - maybe dialog box
strFolder = "D:\Data\Outlook_Attachments\"

' Check each selected item for attachments.
' If attachments exist, save them to the Temp
' folder and strip them from the item.
For Each objMsg In objSelection
' This code only strips attachments from mail items.
If objMsg.Class = olMail Then
' Get the Attachments collection of the item.
Set objAttachments = objMsg.Attachments
lngCount = objAttachments.Count
If lngCount 0 Then
' We need to use a count down loop for
' removing items from a collection. Otherwise,
' the loop counter gets confused and only every
' other item is removed.
strFile = ""
For i = lngCount To 1 Step -1
' Get the file name.
strFile = strFile & strFolder &
objAttachments.Item(i).FileName

' Save the attachment as a file.
objAttachments.Item(i).SaveAsFile strFile

' Delete the attachment.
objAttachments.Item(i).Delete
Next i

Dim objDoc As Object
Dim objInsp As Outlook.Inspector
Set objInsp = objMsg.GetInspector
Set objDoc = objInsp.WordEditor

objDoc.Characters(1).InsertBefore strFile
objDoc.Save

End If
End If
Next

ExitSub:
Set objDoc = Nothing
Set objInsp = Nothing
Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing

Exit Sub

StripAttachments_err:
MsgBox "An unexpected error has occurred." _
& vbCrLf & "Please note and report the following information." _
& vbCrLf & "Macro Name: StripAttachments" _
& vbCrLf & "Error Number: " & Err.Number _
& vbCrLf & "Error Description: " & Err.Description _
& vbCrLf & "Error Source: " & Err.Source _
, vbCritical, "Error!"

GoTo ExitSub
End Sub


  #3  
Old October 14th 07, 08:50 PM posted to microsoft.public.outlook.program_vba
Chris Weirup[_2_]
external usenet poster
 
Posts: 2
Default Outlook 2007 - Error Inserting Text into Received E-mail

Thanks for the note. I think this is the page you mentioned, which is very
useful:
http://outlookcode.com/article.aspx?id=59

However, Most of the points about the new WordEditor don't seem to either
apply to me or indicate that I should be able to do what I mentioned in my
first e-mail. I installed Outlook 2007 and Word 2007 at the same time, so I
should have at least the majority of the methods and properties available.

Under the header "Word as the item editor", it says:
"...Inspector.WordEditor will return a Word.Document object for any type of
Outlook item, except NoteItem, making it possible to use Word methods to
insert text and graphics, insert a QuickPart, format text, apply a theme, and
perform other item body tasks that were difficult if not impossible to
perform in the past."

I can achieve similar behavior by opening an e-mail, then selecting "Edit
Message" under the "Actions-Other Actions" toolbar. Shouldn't I be able to
do this via VBA? This seems like basic functionality, regardless if it's a
lightweight or heavyweight version of the Word editor.

Thanks!
- Chris


"Ken Slovak - [MVP - Outlook]" wrote:

There are issues with things not working in WordMail 2007 and even more
things don't work if Word and Outlook are from different SKU's or from
certain versions of Office. See the discussion of WordMail limitations on
the page of issues for developers at www.outlookcode.com.

You might have to find a different way of doing what you want or it might
not be doable.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


  #4  
Old October 15th 07, 03:57 PM posted to microsoft.public.outlook.program_vba
Ken Slovak - [MVP - Outlook]
external usenet poster
 
Posts: 5,848
Default Outlook 2007 - Error Inserting Text into Received E-mail

Well, similar code using objDoc.Characters(1).InsertBefore strFile does work
in a new mail item, so it's a matter of WordMail not allowing writing to the
item unless it's set for editing. About the only way I see to do that is to
find the control that allows editing an email item and execute it.

Even with Outlook 2007 you can do that using the old style CommandBar
interface.

Dim oButton As Office.CommandBarButton

Set oButton = oInspector.CommandBars("Menu Bar").FindControl(Id:=5604,
Recursive:=True)
oButton.Execute

After that the email is put into edit mode and the Word type code

objDoc.Characters(1).InsertBefore strFile

will work. I'd see if saving the email item as well as the Document item or
instead of that is necessary though.

An alternative would be to use the Outlook object model and do something
like this:
Dim strBody As String
strBody = objMsg.Body
strBody = strFile & strBody
objMsg.Body = strBody

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Chris Weirup" wrote in message
...
Thanks for the note. I think this is the page you mentioned, which is very
useful:
http://outlookcode.com/article.aspx?id=59

However, Most of the points about the new WordEditor don't seem to either
apply to me or indicate that I should be able to do what I mentioned in my
first e-mail. I installed Outlook 2007 and Word 2007 at the same time, so
I
should have at least the majority of the methods and properties available.

Under the header "Word as the item editor", it says:
"...Inspector.WordEditor will return a Word.Document object for any type
of
Outlook item, except NoteItem, making it possible to use Word methods to
insert text and graphics, insert a QuickPart, format text, apply a theme,
and
perform other item body tasks that were difficult if not impossible to
perform in the past."

I can achieve similar behavior by opening an e-mail, then selecting "Edit
Message" under the "Actions-Other Actions" toolbar. Shouldn't I be able
to
do this via VBA? This seems like basic functionality, regardless if it's a
lightweight or heavyweight version of the Word editor.

Thanks!
- Chris


  #5  
Old October 15th 07, 07:43 PM posted to microsoft.public.outlook.program_vba
Chris Weirup[_2_]
external usenet poster
 
Posts: 2
Default Outlook 2007 - Error Inserting Text into Received E-mail

Ken,

Ah, that's what I was missing! I thought there was a method for putting the
Document into Edit mode, but this will work just as well.

I did update the code to use the Outlook object model, although I am losing
the formatting.

Thanks again for the help!

- Chris

"Ken Slovak - [MVP - Outlook]" wrote:

Well, similar code using objDoc.Characters(1).InsertBefore strFile does work
in a new mail item, so it's a matter of WordMail not allowing writing to the
item unless it's set for editing. About the only way I see to do that is to
find the control that allows editing an email item and execute it.

Even with Outlook 2007 you can do that using the old style CommandBar
interface.

Dim oButton As Office.CommandBarButton

Set oButton = oInspector.CommandBars("Menu Bar").FindControl(Id:=5604,
Recursive:=True)
oButton.Execute

After that the email is put into edit mode and the Word type code

objDoc.Characters(1).InsertBefore strFile

will work. I'd see if saving the email item as well as the Document item or
instead of that is necessary though.

An alternative would be to use the Outlook object model and do something
like this:
Dim strBody As String
strBody = objMsg.Body
strBody = strFile & strBody
objMsg.Body = strBody

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Chris Weirup" wrote in message
...
Thanks for the note. I think this is the page you mentioned, which is very
useful:
http://outlookcode.com/article.aspx?id=59

However, Most of the points about the new WordEditor don't seem to either
apply to me or indicate that I should be able to do what I mentioned in my
first e-mail. I installed Outlook 2007 and Word 2007 at the same time, so
I
should have at least the majority of the methods and properties available.

Under the header "Word as the item editor", it says:
"...Inspector.WordEditor will return a Word.Document object for any type
of
Outlook item, except NoteItem, making it possible to use Word methods to
insert text and graphics, insert a QuickPart, format text, apply a theme,
and
perform other item body tasks that were difficult if not impossible to
perform in the past."

I can achieve similar behavior by opening an e-mail, then selecting "Edit
Message" under the "Actions-Other Actions" toolbar. Shouldn't I be able
to
do this via VBA? This seems like basic functionality, regardless if it's a
lightweight or heavyweight version of the Word editor.

Thanks!
- Chris



 




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Can't change text size in received mail Robert Outlook Express 10 October 23rd 07 01:38 PM
Eliminating Outlook 2000 Inserting [Name] in Reply text MitchC Outlook - Installation 1 April 27th 07 09:50 PM
Mail always received as HTML-US ASCII but I choose Rich text?? RJ Outlook - Installation 2 November 27th 06 02:43 PM
How do I prevent Outlook inserting line breaks in a plain text? Ernie Gronblom Outlook - Installation 1 October 6th 06 04:30 PM
Inserting RTF Text in a Message Body Ridge Kennedy Outlook and VBA 4 April 12th 06 03:29 PM


All times are GMT +1. The time now is 11:21 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2025 Outlook Banter.
The comments are property of their posters.