I am using "Automatic" update. The DDE server can process
only one request at a time. On the s/sheet there are 160
links. If I switch to "Manual", the DDE server will
repond "busy" to all outstending requests while procesing
the first request. As a result Excel flods the system with
useless messages (for evry "Busy" response it issues new
request...) and as a result the whole system becomes
unresponsive. That also slows down the DDE and as a result
the updates are even slower. If I use "Automatic" updates,
then Excel estabilishes "hot links" with the DDE server.
During the Initiate-Advice sequece the DDE server makes a
list of all requests and then sends the updates one after
onother. This way the updates are much faster (at least
that was the case with all Excel versions before Excel
2002).
The funniest thing is that if during the DDE Initiate -
DDE Advise sequence Excel has the imput focus it takes a
long time for Excel to respond to the messages sent from
the DDE Server. If when I open the s/sheet and
press "Update" button, I switch the focus to any other
application, then Excel responds very quickly and
performance is good. (but stil slower than Excel 2000 and
any version of Excel is slower than OpenOffice 1.1)
You can contact me on
alexandern_removethis_@inet.co.za - remove "_removethis_"
> I am using "Automatic" update.
OK.
That wasn't an answer to the question I asked (about Tools / Options /
Calculation), but my question was possibly irrelevant if you don't have
a lot of cells dependent on the cells receiving data over the DDE link.
> The funniest thing is that if during the DDE Initiate -
> DDE Advise sequence Excel has the imput focus it takes a
[quoted text clipped - 4 lines]
> performance is good. (but stil slower than Excel 2000 and
> any version of Excel is slower than OpenOffice 1.1)
I have not made much use of DDE myself, so I am shooting in the dark.
What is the code in your Update button doing?
Is there an opportunity to throw in a DoEvents or two?
Or to wait a bit:
Application.Wait Now+TimeValue("0:0:2") wait 2 seconds.
Bill Manville
MVP - Microsoft Excel, Oxford, England
No email replies please - respond to newsgroup
Alex N. - 30 Dec 2003 08:41 GMT
Thanks for your response Bill. But I think there is a bug (or DDE implementation change) in the latest versions of Excel, or even change in the DDE suport undef Windows XP as a whole.
My DDE server is implemented in VC++ (not using MFC) and I have full control over the code. I did put some profiling and performance monitoting code in it and the result is that Excel is responding extremely slow when it is the active application (note that the "Ignore other applications" option is not switched on). When Excel is in the back-ground it works fine.
So I desided to abandon DDE completely and implemented the same functionality using "RTD" (RealTimeData) function in Excel 2002 & Excel 2003. For the erlier versions I will still use DDE as "RTD" is not available.
And it is a fact that M$ provides DDE support only for backword compatibility and after Windows 95 they do not fix bugs and do not enhance it (read they do not support DDE) or at least that is what MSDN says about DDE.