MS Project 2016- VBA周期时间问题(提取到Excel)



我有许多宏,与MS Project 接口时似乎正在放慢速度(例如,读取数据和处理数据( MS Office 2016 。这可能是我的基本代码,获取/存储数据的机制,但我不确定并且会欣赏输入。

我只是写了一个新的宏来将MSP数据提取到一个数组中(在内存中举行,我认为这是最快的,但似乎很难做到这一点(。这个想法是,在需要提取/放置数据时,数组内存访问"应该比从MS Excel到引用的项目更快?也许这是不正确的。

AIM:将每个MS项目资源的3个部分保留在数组中,最终迭代ARNARY,然后将其放入Excel中以供其他使用/处理。

在打破代码进行审查之前

在下面的想法,还是用于与MSP 2016参考库进行接口?与仅在MS Excel中工作相比,它似乎变得非常慢。

子例程:

  Private Sub cb_IMSResourceImport_Click()
        Dim Prj As Project
        Set Prj = GetObject(Me.cboMaintainToProject.Value)
        Dim ResourceMatrix() As String
        Prj.Application.WindowActivate Prj.Name
        ReDim ResourceMatrix(Prj.Resources.Count, 2)
    ActiveWorkbook.Sheets("Resource Table").Range("A2:C" & C`Str(ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count)).ClearContents
       For i = 1 To UBound(ResourceMatrix)
            ResourceMatrix(i - 1, 0) = Prj.Resources(i).ID
            ResourceMatrix(i - 1, 1) = Prj.Resources(i).Name
            ResourceMatrix(i - 1, 2) = Prj.Resources(i).Code
       Next i
       For i = 0 To UBound(ResourceMatrix)
            ActiveWorkbook.Sheets("Resource Table").Cells(i + 1, 1).Value = ResourceMatrix(i, 0)
            ActiveWorkbook.Sheets("Resource Table").Cells(i + 1, 2).Value = ResourceMatrix(i, 1)
            ActiveWorkbook.Sheets("Resource Table").Cells(i + 1, 3).Value = ResourceMatrix(i, 2)
       Next i
End Sub

使用Project 2013和具有2000资源的模拟时间表,您的代码运行不到2分钟。也就是说,如果您有许多时间表打开,请继续进行计算等。

可能需要更长的时间。

但是,还有另一种将类似数据从项目中复制到Excel非常快的方法 - 使用剪贴板。

Private Sub ExtractResources()
    Dim prj As MSProject.Project
    Set prj = GetObject(Me.cboMaintainToProject.Value)
    Dim msp As MSProject.Application
    Set msp = prj.Application
    msp.WindowActivate prj.Name
    ActiveWorkbook.Sheets("Resource Table").Range("A2:C" & CStr(ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count)).ClearContents
    msp.ViewApply "Resource Sheet"
    msp.SelectSheet
    msp.EditCopy
    ActiveWorkbook.Sheets("Resource Table").Range("A2").PasteSpecial xlPasteValues
End Sub

注意:修改资源视图(或创建自己的(以定义要从项目中导出的列。如果您希望导出ID列,请检查与资源视图所用的表的定义,以确保第一列未锁定,否则它将不会包含在SelectSheet方法中。

最新更新