我目前正在 Excel VBA 中创建一个宏,以从 MS 项目文档导入数据。
我在代码中包含了想要导入的所有属性,但找不到正确的 TaskDependency (i, 15)。如果前驱或后继为 true,则此属性应包含“True” - 如果两者均为 false,则应包含“False”。
我收到运行时错误“438” 对象不支持此属性或方法
这可能是错误的属性吗?有人可以帮我吗?
https://learn.microsoft.com/en-us/office/vba/api/project.task - 这里是所有可以找到的属性。
提前致谢
致以诚挚的问候 凯
Sub ImportDataFromProject()
Dim objProject As Object 'MS Project application
Dim objTask As Object 'Task object
Dim strFileName As String 'File name
Dim i As Long 'Counter
Dim fd As FileDialog 'File dialog object
'Create file dialog object and set properties
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "W�hlen Sie eine Project-Datei aus"
fd.Filters.Clear
fd.Filters.Add "Project-Dateien", "*.mpp"
'Show file dialog and get file name
If fd.Show = -1 Then 'User clicked OK
strFileName = fd.SelectedItems(1) 'Get first selected item
'Create MS Project instance and open file
Set objProject = CreateObject("MSProject.Application")
objProject.FileOpen strFileName
'Loop through tasks and copy data to Excel
i = 4
For Each objTask In objProject.ActiveProject.Tasks
If Not objTask Is Nothing Then 'Skip blank rows
Cells(i, 1) = objTask.ID
Cells(i, 2) = objTask.Name 'Copy task name to column A
Cells(i, 3) = objTask.Start 'Startdatum
Cells(i, 4) = objTask.Finish 'Enddatum
Cells(i, 5) = objTask.Predecessors 'Vorg�nger
Cells(i, 6) = objTask.Successors 'Nachfolger
Cells(i, 7) = objTask.Summary ' Sammelvorgang
Cells(i, 8) = objTask.Milestone 'Meilenstein
Cells(i, 9) = objTask.Duration 'Dauer
Cells(i, 10) = objTask.PercentComplete 'Fertigstellung
Cells(i, 11) = objTask.ConstraintType 'Einschr�nkungstyp
Cells(i, 12) = objTask.Active 'Aktive Aktivit�ten
Cells(i, 13) = objTask.FreeSlack 'Freie Puffer
'Cells(i, 14) = objTask.X
Cells(i, 15) = objTask.TaskDependencies 'Verknüpfungen
Cells(i, 16) = objTask.Critical ' Kritisch
Cells(i, 17) = objTask.ConstraintDate 'Einschr�nkungstermin
i = i + 1 'Increment counter
End If
Next objTask
'Close MS Project file and application
objProject.FileClose False
objProject.Quit pjDoNotSave
Else 'User clicked Cancel or closed the dialog
MsgBox "Keine Datei ausgew�hlt."
End If
End Sub
半个答案,更多的是一种解决方法:
由于 TaskDependencies 是唯一可以在不从项目中提取的情况下进行填充的字段,因此我决定直接在单元格中创建一个 If 语句来创建解决方法:
If(or(E4>0;F4>0);TRUE)
E= 前辈 F= 后继者 4= 我的列表开始的地方
由于“TaskDependency 获取依赖(前置和后继)任务的集合”,这个解决方案对我来说是可行的。 不是最干净的,但也可以了。