我有许多宏,与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方法中。