excel - MS Project 2016 - VBA 周期时间问题(提取到 Excel)
问题描述
在 MS Office 2016 中与 MS Project 交互(例如,读取数据并处理它)时,我有许多宏似乎正在减慢。它可能是我的底层代码,用于获取/存储数据的机制,但我不确定并且希望输入。
我只是在编写一个用于将 MSP 数据提取到数组中的新宏(保存在内存中,我认为这将是最快的,但它似乎很难做到这一点)。这个想法是数组内存访问“应该”比从 MS Excel 桥接到需要提取/放置数据时引用的项目更快?也许这是不正确的。
目标:将每个 MS 项目资源的 3 个部分保存在数组中,最终遍历数组并放入 Excel 中以供额外使用/处理。
在我破坏代码进行审查之前,最初的“阅读”从未完全完成(在我的 1300 个资源中的 926 个)。
下面的想法,或与 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 分钟。也就是说,如果您有许多日程表打开、未进行计算等,则可能需要更长的时间。
但是,还有另一种方法可以非常快速地将诸如此类的数据从 Project 复制到 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
注意:修改资源视图(或创建您自己的)以定义要从 Project 中导出的列。如果要导出 ID 列,请检查与资源视图一起使用的表的定义,确保第一列未锁定,否则不会包含在 SelectSheet 方法中。
推荐阅读
- angular - SELECT ERROR SQLITE.ALL - 准备错误 1
- django - 即使是现成的 mysql 数据库,我也需要 models.py 吗?
- javascript - javascript中的异步/等待并发函数调用(链函数)
- node.js - Nodejs 锐利库 toFile 方法不进入回调代码
- c# - 我可以避免找不到此成员吗?(来自 HRESULT 的异常:0x80020003 (DISP_E_MEMBERNOTFOUND))?
- java - 在 JAVA 中执行代码块时出现问题,第一次单击时代码未完全运行
- sqlite - 高效地将一个 SQLite 数据库拆分为多个文件
- flutter - 颤振 admob 移除后退按钮
- python - 使用 4D 数据进行 Python 缩放
- reactjs - React Hook - 仅在组件卸载时使用效果,而不是在依赖项更新时使用