我正在编写一个子程序来从活动项目的任务中获取数据。我想要做的是传递一个配置参数,并根据该参数将我的任务子集设置为 activeproject.tasks 中包含的内容,或者选择任务子集并将它们添加到我的新对象中。
我的代码如下所示:
Sub select_data_subset(config As type_ExportConfig)
Dim TaskTarget As Task
Dim TaskCollection As Tasks
Dim TaskArray As Variant
Dim counter As Integer
Select Case config.ExportType
Case enExportAll
Set TaskCollection = ActiveProject.Tasks
Case enExportList
TaskArray = Split(config.TaskList, Application.ListSeparator)
For counter = LBound(TaskArray) To UBound(TaskArray)
TaskCollection.Add ActiveProject.Tasks(Val(TaskArray(counter)))
Next
End Select
End Sub
如果我的配置显示导出全部(enExportAll 是我在模块其他位置的枚举的一部分),我将创建一个与 activeproject.tasks 相同的新对象。如果我的配置提供了要导出的项目列表,我所做的就是从 activeproject.tasks 中提取每个项目并将其添加到我的任务对象中。然后我将该对象传递给另一个函数来进行数据处理。
我遇到的问题是我无法让 enExportList 案例工作。 enExportAll 工作完美。但另一方面,当我告诉我的 TaskCollection 对象添加对象时,它不喜欢它。我收到“对象变量或未设置块变量”。我已经检查了 activeproject.tasks(val(taskarray(counter))) 上的手表,它返回一个任务对象,所以我不知道为什么会收到错误。
Tasks对象不是通用目的集合对象。它是 Project 对象和 ActiveSelection 对象的属性。 Add 方法在项目中创建一个新任务。
这里至少有两个选择:
在这种情况下,选项 1 可能是最好的。
当任务列表很容易过滤时,选项 2 才有意义——例如他们已经有一些共同点。否则,执行此操作的方法是使用“标志”字段,将所有任务设置为“假”,将所需任务的“标志”设置为“真”,然后设置一个过滤器来仅显示这些任务。