Вызов функции Matlab из VBA - PullRequest
       1

Вызов функции Matlab из VBA

0 голосов
/ 10 октября 2018

Я пытаюсь вызвать функции Matlab из VBA и написал простой пример кода, чтобы опробовать его.Код пытается вычислить определитель случайной матрицы 2x2.

Sub Code()
    Dim DMat(1 To 2, 1 To 2) As Double, DetA As Object, Matlab As Object
    Upper = 1000
    Lower = 10
    For i = 1 To 2
        For j = 1 To 2
            DMat(i, j) = ((Upper - Lower) * Rnd + Lower)
            Sheet1.Cells(i + 1, j) = DMat(i, j)
        Next
    Next

    Set Matlab = CreateObject("Matlab.Application")

    On Error GoTo Errorfound
    Matlab.PutWorkspaceData "A", "base", DMat
    Matlab.Execute "Result = det(A);"
    DetA = Matlab.GetVariable("Result", "base")

Errorfound:
    With Err
        MsgBox "Source: " & .Source & vbCrLf & "Desc: " & .Description, _
            vbCritical, "Error " & CStr(.Number)
        End With
    Sheet1.Range("A6").Value = DetA
End Sub

Я получаю Ошибка времени выполнения 440 в строке, содержащей команду GetVariable.Я пытался получить описание, но оно всегда пустое.

enter image description here

Я пытался использовать GetWorkspaceData вместо GetVariable, но результат тот же.

Куда я иду не так?

1 Ответ

0 голосов
/ 11 октября 2018

Все, мне наконец удалось найти решение.Вот код:

Sub Code()

Dim DMat(1 To 2, 1 To 2) As Double, MatLab As Object
Dim DbR(1 To 1) As Double
Dim DbI(1 To 1) As Double

Upper = 100
Lower = 10

For i = 1 To 2
    For j = 1 To 2
        DMat(i, j) = ((Upper - Lower) * Rnd + Lower)
        Sheet1.Cells(i + 3, j) = DMat(i, j)
    Next
Next

Set MatLab = CreateObject("Matlab.Application")
MatLab.PutWorkspaceData "A", "base", DMat
Result = MatLab.Execute("D = det(A) ")
MatLab.GetFullMatrix "D", "base", DbR, DbI
Sheet1.Range("A8").Value = DbR

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...