首页 > 解决方案 > 从 Matlab 调用 VBA Ms Project 函数

问题描述

我正在尝试通过 VBA 函数从 Matlab 收集 Ms Project 任务的持续时间。这个想法是在一个数组(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

任何人都可以帮助我了解发生了什么,以及如何解决这个问题?

谢谢, 豪尔赫

标签: vbamatlabms-project

解决方案


推荐阅读