MS Project 通过 Excel VBA 获取任务依赖项属性

问题描述 投票:0回答:1

我目前正在 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

excel vba ms-project excel-import
1个回答
0
投票

半个答案,更多的是一种解决方法:

由于 TaskDependencies 是唯一可以在不从项目中提取的情况下进行填充的字段,因此我决定直接在单元格中创建一个 If 语句来创建解决方法:

If(or(E4>0;F4>0);TRUE)

E= 前辈 F= 后继者 4= 我的列表开始的地方

由于“TaskDependency 获取依赖(前置和后继)任务的集合”,这个解决方案对我来说是可行的。 不是最干净的,但也可以了。

© www.soinside.com 2019 - 2024. All rights reserved.