Discussion:
Using VBA to send Word document as body of message works in 2007, but not in 2003
(too old to reply)
Doug Robbins - Word MVP
2010-02-14 03:56:12 UTC
Permalink
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following code,
which is located inside a With ActiveDocument - End With construction, works
fine in Word 2007:

Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing

ObjDoc is declared as an Object and strID as a String and earlier in the
code there is the following:

On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If

In Word 2003 however, it does not work and testing for strID using MsgBox
strID after it is set to .EntryID, I just get an empty message box so that
it appears that .EntryID is not being assigned.

Any clues on how to overcome this?
--
Regards,

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Doug Robbins - Word MVP
2010-02-14 04:08:56 UTC
Permalink
As a followup, if I remove the On Error Resume Next, the following error
message is displayed:

430 Class does not support Automation or does not support expected interface

Any clues on how to overcome this?
--
Regards,

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following code,
which is located inside a With ActiveDocument - End With construction,
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in the
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using MsgBox
strID after it is set to .EntryID, I just get an empty message box so that
it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Sue Mosher [MVP]
2010-02-14 04:55:05 UTC
Permalink
Which statement raises that error? You're running this code in Word VBA?
--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following error
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following code,
which is located inside a With ActiveDocument - End With construction,
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in the
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using MsgBox
strID after it is set to .EntryID, I just get an empty message box so
that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Doug Robbins - Word MVP
2010-02-14 05:45:45 UTC
Permalink
Hi Sue,

Yes, it is being run from Word. It is in the Word 2003 version of the
add-in that can be downloaded from:

http://www.gmayor.com/ManyToOne.htm

However, in the 2003 version that is available there, the "Merge to Email
Message" facility has been disabled.

The error is being caused by the

Set objDoc = .MailEnvelope.Item

command. Note that line of code is inside a With ActiveDocument...End With
construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
--
Sue Mosher, Outlook MVP
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following error
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following code,
which is located inside a With ActiveDocument - End With construction,
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in the
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Sue Mosher [MVP]
2010-02-14 19:02:34 UTC
Permalink
What does ActiveDocument.MailEnvelope return?
--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to Email
Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following error
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following code,
which is located inside a With ActiveDocument - End With construction,
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Doug Robbins - Word MVP
2010-02-14 23:41:54 UTC
Permalink
Hi Sue,

If I insert

MsgBox ActiveDocument.MailEnvelope

into the code, or just create a macro in the normal.dot template that
contains that code, in both cases, I get the Run-Time error '430' message

Class does not support Automation or does not support expected interface.

The same error message appears if I try and run the following code from the
VBA Help File:

ActiveDocument.MailEnvelope.Introduction = _
"Please review this document and let me know " & _
"what you think. I need your input by Friday." & _
" Thanks."

I have tried deleting Registry Keys, and re-registering Word, but that did
not make any difference

I have also tried running the code from
http://www.outlookcode.com/codedetail.aspx?id=1333 from Outlook, which did
not work and if I comment out the On Error Resume Next, I get the same error
message.

BTW, this was a fresh install of Office 2003 on a machine that previously
had 2010 Beta on it, but that was uninstalled before 2003 was installed and
the Registry Keys for Office 14.0 have been deleted.
--
Regards,

Doug Robbins - Word MVP
Post by Sue Mosher [MVP]
What does ActiveDocument.MailEnvelope return?
--
Sue Mosher, Outlook MVP
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to Email
Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following
code, which is located inside a With ActiveDocument - End With
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Sue Mosher [MVP]
2010-02-15 00:15:33 UTC
Permalink
My guess is that the problem has to do with the 2010 installation. I have no
idea how to fix that. You might want to ask on the beta forum how to do a
complete uninstallation.
--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
If I insert
MsgBox ActiveDocument.MailEnvelope
into the code, or just create a macro in the normal.dot template that
contains that code, in both cases, I get the Run-Time error '430' message
Class does not support Automation or does not support expected interface.
The same error message appears if I try and run the following code from
ActiveDocument.MailEnvelope.Introduction = _
"Please review this document and let me know " & _
"what you think. I need your input by Friday." & _
" Thanks."
I have tried deleting Registry Keys, and re-registering Word, but that did
not make any difference
I have also tried running the code from
http://www.outlookcode.com/codedetail.aspx?id=1333 from Outlook, which did
not work and if I comment out the On Error Resume Next, I get the same
error message.
BTW, this was a fresh install of Office 2003 on a machine that previously
had 2010 Beta on it, but that was uninstalled before 2003 was installed
and the Registry Keys for Office 14.0 have been deleted.
--
Regards,
Doug Robbins - Word MVP
Post by Sue Mosher [MVP]
What does ActiveDocument.MailEnvelope return?
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to
Email Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following
code, which is located inside a With ActiveDocument - End With
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Doug Robbins - Word MVP
2010-02-15 00:11:07 UTC
Permalink
Hi Sue,

While ActiveDocument.MailEnvelope also errors out in Word 2007, in that
version, ActiveDocument.MailEnvelope.Parent returns the name of the active
document, but it gives the 430 error message in Word 2003.

Also, I have now tried that on machines that have never had anything later
than Office 2003 installed on them with the same result.
--
Hope this helps,

Doug Robbins - Word MVP

Please reply only to the newsgroups unless you wish to obtain my services on
a paid professional basis.
Post by Sue Mosher [MVP]
What does ActiveDocument.MailEnvelope return?
--
Sue Mosher, Outlook MVP
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to Email
Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following
code, which is located inside a With ActiveDocument - End With
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Sue Mosher [MVP]
2010-02-15 00:18:37 UTC
Permalink
On the pure Office 2003 machines, did you install Outlook and Word from the
same SKU? If not, I think the Office Envelope functionality (among other
features) won't work.

Also, I don't know what you mean about this code being related to the
add-in. If add-ins are present, maybe disabling them would reveal something
useful.
--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
While ActiveDocument.MailEnvelope also errors out in Word 2007, in that
version, ActiveDocument.MailEnvelope.Parent returns the name of the active
document, but it gives the 430 error message in Word 2003.
Also, I have now tried that on machines that have never had anything later
than Office 2003 installed on them with the same result.
--
Hope this helps,
Doug Robbins - Word MVP
Please reply only to the newsgroups unless you wish to obtain my services on
a paid professional basis.
Post by Sue Mosher [MVP]
What does ActiveDocument.MailEnvelope return?
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to
Email Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following
code, which is located inside a With ActiveDocument - End With
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty message
box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Doug Robbins - Word MVP
2010-02-16 08:30:07 UTC
Permalink
Thanks, Sue.

I have now determined that it must be something to do with the particular
installation of Office.
--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
On the pure Office 2003 machines, did you install Outlook and Word from
the same SKU? If not, I think the Office Envelope functionality (among
other features) won't work.
Also, I don't know what you mean about this code being related to the
add-in. If add-ins are present, maybe disabling them would reveal
something useful.
--
Sue Mosher, Outlook MVP
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54
Post by Doug Robbins - Word MVP
Hi Sue,
While ActiveDocument.MailEnvelope also errors out in Word 2007, in that
version, ActiveDocument.MailEnvelope.Parent returns the name of the
active document, but it gives the 430 error message in Word 2003.
Also, I have now tried that on machines that have never had anything
later than Office 2003 installed on them with the same result.
--
Hope this helps,
Doug Robbins - Word MVP
Please reply only to the newsgroups unless you wish to obtain my services on
a paid professional basis.
Post by Sue Mosher [MVP]
What does ActiveDocument.MailEnvelope return?
Post by Doug Robbins - Word MVP
Hi Sue,
Yes, it is being run from Word. It is in the Word 2003 version of the
http://www.gmayor.com/ManyToOne.htm
However, in the 2003 version that is available there, the "Merge to
Email Message" facility has been disabled.
The error is being caused by the
Set objDoc = .MailEnvelope.Item
command. Note that line of code is inside a With ActiveDocument...End
With construction, and when writing the code, the intellisense provides
MailEnvelope.Item as a suggestion.
--
Regards,
Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
Post by Sue Mosher [MVP]
Which statement raises that error? You're running this code in Word VBA?
Post by Doug Robbins - Word MVP
As a followup, if I remove the On Error Resume Next, the following
430 Class does not support Automation or does not support expected interface
Post by Doug Robbins - Word MVP
Based on Sue Mosher's code at
http://www.outlookcode.com/codedetail.aspx?id=1333, the following
code, which is located inside a With ActiveDocument - End With
Set objDoc = .MailEnvelope.Item
With objDoc
.To = strEmail
.Subject = strSubject
.Save
strID = .EntryID
End With
Set objDoc = Nothing
Set objDoc =
oOutlookApp.Session.GetItemFromID(strID)
With objDoc
.Send
End With
Set objDoc = Nothing
ObjDoc is declared as an Object and strID as a String and earlier in
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
In Word 2003 however, it does not work and testing for strID using
MsgBox strID after it is set to .EntryID, I just get an empty
message box so that it appears that .EntryID is not being assigned.
Any clues on how to overcome this?
Loading...