Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Mailmerge and Fax / January 2007

Tip: Looking for answers? Try searching our database.

Word Could Not Re-Establish DDE Connection to MS Excel to complete the task.

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
ramudu - 21 Dec 2006 16:57 GMT
Hi,

We use mail merge in our application and for one our clients it is
throwing the above error while generating the mail merge document. This
happens when I invoke the OpenDataSource() method.

The code for opening the spreadsheet looks something like this:

Dim o As Object = Type.Missing

m_doc.MailMerge.OpenDataSource(m_strDsName, _
            o, o, o, o, o, o, o, o, o, o, _
           "Data", o, o, o,
Word.WdMergeSubType.wdMergeSubTypeWord2000)

where m_strDsName is the physical location of the document.

In my case, it is able to get data up to a certain number of rows after
which it starts to throw an error. I looked at the Microsoft support
website for the error,

http://support.microsoft.com/kb/196952

but this document doesn't help much in my case.

My Excel data source consists of one spreadsheet with one sheet called
Sheet1 and the columns are dynamically generated.

In some posts in this and other groups I've seen that DDE is not
reliable and using ODBC is encouraged. So I tried using an ODBC
connection and the code for the same looks like this.

               Dim sConnection As String

               sConnection = "DSN=Excel Files;DBQ=""" & m_strDsName &
"![Sheet1]"";DriverId=790;MaxBufferSize =2048;PageTimeout=5;"

               m_doc.MailMerge.OpenDataSource(Name:=m_strDsName, _
                   ConfirmConversions:=False, OpenExclusive:=False, _
                   LinkToSource:=True, ReadOnly:=True, _
                   Format:=WdOpenFormat.wdOpenFormatAuto, _
                   Connection:=sConnection, _
                   SQLStatement:="SELECT * FROM 'Data",
SQLStatement1:="", _
                   SubType:=WdMergeSubType.wdMergeSubTypeWord2000)

This too throws an error 'Cannot establish connection to data source'.

Help! Thanks! :)

- Sri
Peter Jamieson - 21 Dec 2006 20:39 GMT
If you have to use DDE, I suggest you try something along the following
lines:

Dim sConnection As String

' leve the Sheet name out of the DBQ string. You may not need the stuff
beyond DriverId either

sConnection = "DSN=Excel Files;DBQ=""" & _
                       m_strDsName & ";DriverId=790;MaxBufferSize
=2048;PageTimeout=5;"

' For a machine (user/system) DSN, leave Name:=""

m_doc.MailMerge.OpenDataSource(Name:="", _
 SQLStatement:="SELECT * FROM 'Sheet1$'", _
 SubType:=WdMergeSubType.wdMergeSubTypeWord2000)

There are other possibilities, but that's where I'd start.

Peter Jamieson
> Hi,
>
[quoted text clipped - 47 lines]
>
> - Sri
ramudu - 21 Dec 2006 22:44 GMT
Hi Peter,

I tried this:

               Dim sConnection As String

               sConnection = "DSN=Excel Files;DBQ=""" & m_strDsName &
""";DriverId=790;"

               m_doc.MailMerge.OpenDataSource(Name:="", _
                  ConfirmConversions:=False, OpenExclusive:=False, _
                  LinkToSource:=True, ReadOnly:=True, _
                  Format:=WdOpenFormat.wdOpenFormatAuto, _
                  Connection:=sConnection, _
                  SQLStatement:="SELECT * FROM 'Sheet1$'",
SQLStatement1:="", _
                  SubType:=WdMergeSubType.wdMergeSubTypeWord2000)

But this doesn't work either. It gives the error "Word was unable to
open the data source."

Another thing - this might be trivial but notice that I have quotes
around m_strDsName in the
sConnection string. If I don't give this, it immediately throws an
error saying it cannot connect to the data source.

- Sri

> If you have to use DDE, I suggest you try something along the following
> lines:
[quoted text clipped - 68 lines]
> >
> > - Sri
Peter Jamieson - 22 Dec 2006 01:03 GMT
Sorry, got my wires crossed earlier.

For ODBC, you need

m_doc.MailMerge.OpenDataSource(Name:="", _
 Connection:="DSN=Excel Files;DBQ=" & m_strDsName & ";", _
 SQLStatement:="SELECT * FROM `Sheet1$`", _
 SubType:=WdMergeSubType.wdMergeSubTypeWord2000)

i.e.
a. I do not think you need the quotes around the pathname in the connection
string (although they may not do any harm either) and you probably do not
need the other items such as DriverID and so on (but they won't do any harm
either).
b. the quotes around the sheet name have to be backquotes `` not straight
quotes ''.

If you really need DDE, the problem is that you cannot connect to an
arbitrary sheet, whatever you specify. DDE will only open either the first
sheet, or the sheet you had open when you last closed the workbook (I'm
still looking at the details on that one).

Peter Jamieson

> Hi Peter,
>
[quoted text clipped - 96 lines]
>> >
>> > - Sri
ramudu - 22 Dec 2006 06:58 GMT
Hi Peter,

That worked just great! Thanks a ton! You saved my vacation! :)

- Sri

> Sorry, got my wires crossed earlier.
>
[quoted text clipped - 120 lines]
> >> >
> >> > - Sri
ramudu - 02 Jan 2007 16:06 GMT
Hi Peter,

One of the problems that I am facing using ODBC is that excel
spreadsheet does not open up automatically as it used to while using
DDE. This is a problem for some of my clients who are used to this.

You did mention that I can use DDE for the connection string. What
changes do I have to make to the connection string for this?

Thanks!

- Sri

> Hi Peter,
>
[quoted text clipped - 126 lines]
> > >> >
> > >> > - Sri
Peter Jamieson - 03 Jan 2007 10:02 GMT
In Word 2003, the following seems to be enough for a workbook containing a
single worksheet:

ActiveDocument.MailMerge.OpenDataSource _
 Name:="the full path name of your workbook",  _
 Connection:="Entire Spreadsheet", _
 SubType:=wdMergeSubTypeWord2000

You can specify a range name or a range in R1C1:RnCn format (but not in
A1:Zn format) in the connection parameter.

However, if the workbook is multisheet, things are tricky because as far as
I know there's no way to specify a particular sheet in either the Connection
or the SQLStatement parameter (which I've left out, above). What seems to
happen then is very confusing - Word appears to look at the sheet that is
currently displaying (or, if the workbook was closed when you called
OpenDataSource, the worksheet that was displaying when the workbook was
closed) and get the column and row count from there. However, it actually
gets the data from the first sheet in the book.

Peter Jamieson

> Hi Peter,
>
[quoted text clipped - 153 lines]
>> > >> >
>> > >> > - Sri
ramudu - 03 Jan 2007 16:25 GMT
Hi Peter,

This gives the initial error "Word Could Not Re-Establish DDE
Connection to MS Excel to complete the task.".

I'm guessing that DDE cannot handle the amount of data in the excel
spreadsheet.

- Sri

> In Word 2003, the following seems to be enough for a workbook containing a
> single worksheet:
[quoted text clipped - 175 lines]
> >> > >> >
> >> > >> > - Sri
Peter Jamieson - 04 Jan 2007 20:06 GMT
> I'm guessing that DDE cannot handle the amount of data in the excel
> spreadsheet.

You could be right, but that's something you could check experimentally.

Broadly speaking if the connection works when you do it manually, it should
work when you do it programmatically. If you can experiment with a smaller
Excel sheet then you should be able to establish whether the macro /ever/
connects.

So does it connect when you try manually? If not
a. is Excel definitely allowing DDE requests (there's an option in Excel
Tolls|Options that can prevent DDE from working
b. How many rows and columns are we talking about here, and do the fields
contain large amounts of info. (e.g. large texts) or small chunks of data -
numbers, mailing addresses, that sort of stuff?

Peter Jamieson

> Hi Peter,
>
[quoted text clipped - 201 lines]
>> >> > >> >
>> >> > >> > - Sri
ramudu - 05 Jan 2007 19:23 GMT
Hi Peter,

Yes, the DDE connection does work with smaller spreadsheets. In my case
it does up to 1103 rows.

Usually the spreadsheet has less amount than this, but in this case one
our clients has about 1220 rows.

The data in each cell is pretty small in itself. It mostly has numbers
(financial information), emails, names of companies etc.

- Sri

> > I'm guessing that DDE cannot handle the amount of data in the excel
> > spreadsheet.
[quoted text clipped - 220 lines]
> >> >> > >> >
> >> >> > >> > - Sri
ramudu - 21 Dec 2006 22:44 GMT
Hi Peter,

Thanks for your quick response.

I tried this:

               Dim sConnection As String

               sConnection = "DSN=Excel Files;DBQ=""" & m_strDsName &
""";DriverId=790;"

               m_doc.MailMerge.OpenDataSource(Name:="", _
                  ConfirmConversions:=False, OpenExclusive:=False, _
                  LinkToSource:=True, ReadOnly:=True, _
                  Format:=WdOpenFormat.wdOpenFormatAuto, _
                  Connection:=sConnection, _
                  SQLStatement:="SELECT * FROM 'Sheet1$'",
SQLStatement1:="", _
                  SubType:=WdMergeSubType.wdMergeSubTypeWord2000)

But this doesn't work either. It gives the error "Word was unable to
open the data source."

Another thing - this might be trivial but notice that I have quotes
around m_strDsName in the
sConnection string. If I don't give this, it immediately throws an
error saying it cannot connect to the data source.

- Sri

> If you have to use DDE, I suggest you try something along the following
> lines:
[quoted text clipped - 68 lines]
> >
> > - Sri
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.