Динамический обмен данными (DDE), страница 13

Application.DDEExecute lngChannel2, "y=[1,2;2,4;3,6]"

Application.DDEExecute lngChannel2, "z=x*y"

Rem Запрашиваем из MATLAB строковый результат выполнения последней команды

returnList1 = Application.DDERequest(lngChannel2, "EngStringResult")

Rem Размещаем на рабочем листе Excel результаты в цикле, учитывая,

Rem что returnList1 получили в виде массива строк размером n*1.

Rem LBound(returnList1,1)и UBound(returnList1,1)возвращаяют индексы

Rem первого и последнего элемента массива в первом столбце.

For i = LBound(returnList1, 1) To UBound(returnList1, 1)

Worksheets("Лист1").Cells(i, 1).Formula = returnList1(i, 1)

Next i

Rem Запрашиваем из рабочего пространства MATLAB значения матрицы z

returnList2 = Application.DDERequest(lngChannel2, "z")

Rem Размещаем на рабочем листе Excel результаты в двух вложенных циклах,

Rem учитывая,что матрицу returnList2 получили в виде массива чисел размером n*m.

Rem  UBound(returnList2,1)возвращает число строк, а (returnList2, 2) число столбцов.

For i = LBound(returnList2, 1) To UBound(returnList2, 1)

For j = LBound(returnList2, 2) To UBound(returnList2, 2)

Worksheets("Лист1").Cells(i, j + 2).Formula = returnList2(i, j)

Next j

Next i

Rem Посылаем команды построения графика в MATLAB на выполнение

Application.DDEExecute lngChannel2, "figure"

Application.DDEExecute lngChannel2, "fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])"

Rem Запрашиваем из MATLAB результат выполнения последней команды

Rem Если команда в MATLAB успешно выполнилась, то в return4  строковый результат "yes",

Rem а график размещается в буфере обмена Windows

return4 = Application.DDERequest(lngChannel2, "EngFigureResult")

Rem Размещаем на рабочем листе Excel результат  "yes" или "no"

Worksheets("Лист1").Cells(8, 1).Value = return4

Rem Выбираем на рабочем листе Excel место будующей встаки графика

Worksheets("Лист1").Range("A12").Select

Rem Если в return4  строковый результат "yes", то вставляем картинку из буфера обмена

If return4(1) = "yes" Then ActiveSheet.PasteSpecial _

Format:="Metafilepict", DisplayAsIcon:=True

Rem Посылаем команды символьных вычислений в MATLAB на выполнение

Application.DDEExecute lngChannel2, "syms x y z a"

Application.DDEExecute lngChannel2, "x=[1.2,2,3;4,5,6;7,8,9]"

Application.DDEExecute lngChannel2, "y=[1,2;2,4;a,2*a]"

Application.DDEExecute lngChannel2, "z=x*y"

Rem Запрашиваем из MATLAB строковый результат выполнения последней команды

returnList3 = Application.DDERequest(lngChannel2, "EngStringResult")

Rem Размещаем на рабочем листе Excel результат (массив строк)в цикле.

For i = LBound(returnList3, 1) To UBound(returnList3, 1)

Worksheets("Лист1").Cells(i, 6).Formula = returnList3(i, 1)

Next i

End If

End Sub

Private Sub CommandButton2_Click()

Rem Процедура закрытия связи

DDETerminate (lngChannel2)

End Sub

В результате клика левой кнопки мыши на кнопке 1 получим следующие результаты:

Обратите внимание в каком виде представлены результаты вычислений.