Вызов функции VBA Ms Project из Matlab - PullRequest
2 голосов
/ 29 апреля 2020

Я пытаюсь собрать продолжительность задач Ms Project из Matlab через функцию VBA. Идея состоит в том, чтобы собрать все длительности в массив (вариант в VBA), а затем передать эту переменную в Matlab, вызвав функцию. Код VBA включает в себя подпроцесс и функцию. Я могу вызвать подпроцесс из matlab, но он не возвращает никакого значения, поскольку это подпроцесс, а не функция. Однако, когда я напрямую вызываю функцию, я получаю сообщение об ошибке.

Код VBA:

Sub TsksDur()
  Dim TsksDur As Variant
  Dim x As Long        
  TsksDur = GatherTsksDur()
End Sub

    Public Function GatherTsksDur()

    Dim TsksDur As Variant
    Dim x As Long
    Dim Tsk As Task

    'Resize Array prior to loading data
      ReDim TsksDur(ActiveProject.Tasks.Count)

    'Loop through each cell in Range and store value in Array
      For Each Tsk In ActiveProject.Tasks
        TsksDur(x) = Tsk.Duration
        x = x + 1
      Next Tsk

    'Print values to Immediate Window (Ctrl + G to view)
     'For x = LBound(TsksDur) To UBound(TsksDur)
       'Debug.Print TsksDur(x)
      'Next x

     GatherTsksDur = TsksDur 

Код Matlab:

    MSP_a = actxserver('MSProject.Application');
    invoke(MSP_a,'FileOpen',[out_path filesep fname fext]); % Open the Ms Project defined by fname

    TskDur=invoke(MSP_a,'Run','TsksDur'); % Runs properly but returns nothing
    TskDur=invoke(MSP_a,'Run','GatherTsksDur'); % Does not work

Любой может помогите мне понять, что происходит и как решить эту проблему?

Спасибо, Хорхе

...