To reduce CPU for large amounts of data, send arrays of data using ranges instead of sending the data for each cell as a separate point.
If you are using Unicode characters in strings for DDEPoke commands, you should check the button in the DDE option of the Properties window.

This will cause Excel to send your strings of Unicode characters correctly, although slower than numerical data.
The DDEInitiate and DDETerminate commands that are used to open and close DDE links between applications are also very CPU expensive. When sending variables at frequent intervals it is more efficient to open a DDE channel at the beginning of the session and close it when you are finished. Here are two suggestions:
Send multiple points within a single set of DDEInitiate and DDETerminate commands. For example:
'
' Cascade Multiple Writeback macro
'
Sub Cascade_Writeback_Many()
mychannel = DDEInitiate("datahub", "default")
Application.Worksheets("variables").Activate
DDEPoke(mychannel, "pointname1", Cells(1,2))
DDEPoke(mychannel, "pointname2", Cells(2,2))
DDEPoke(mychannel, "pointname3", Cells(3,2))
DDEPoke(mychannel, "pointname4", Cells(4,2))
DDEPoke(mychannel, "pointname5", Cells(5,2))
DDEPoke(mychannel, "pointname6", Cells(6,2))
DDETerminate mychannel
End SubIn this example the worksheet named
variables contains six variables
(pointname1 through
pointname6) that we wish to send to
the DataHub instance. The DDEInitiate
command opens the channel, then all six variables are sent
to the DataHub instance before the link is closed.
Create a separate 'open' and 'close' macro for the worksheet, and place the DDEInitiate and DDETerminate commands in those macros. This will keep communication to the DataHub instance open for the whole time the worksheet is open. The only drawback is that your data transmission could get interrupted (see below).
If you need to send data continually from Excel to the DataHub instance you may run into problems using DDEInitiate and DDEPoke. When you open a DDE channel using the DDEInitiate statement, and follow it with several DDEPoke statements, there is a chance that the DDE channel may fail after some time. For this reason, if you need to keep a DDE channel open for an extended period of time, we suggest that you attempt to deal with DDE errors within the macro.