MS Project 2007 VBA для извлечения задач и пользовательских полей - PullRequest
0 голосов
/ 18 августа 2011

У меня есть простой файл MS Project (2007) с несколькими заданиями. Я также создал настраиваемое поле с именем VBATest и присвоил значения этому настраиваемому полю для двух задач проекта.

Я хотел бы получить список задач проекта и значение, назначенное для настраиваемого поля, например:

ProjectTask | VBATest <--Custom field
------------|--------
Task1       | vba1
Task2       | vba2

Я делаю это из Access 2007 VBA, так как именно здесь и будет окончательный код. Я могу заставить большую часть этого работать, но я не могу прочитать значение настраиваемого поля из объекта Assignments. У Вас есть какие-либо идеи? Спасибо

Вот что я сделал до сих пор.

Sub LoadProjectFile()

Dim pjApp As MSProject.Application
Dim FileToOpen
Dim Proj As MSProject.Project
Dim Project_Task As Task
Dim fd As FileDialog

Set pjApp = New MSProject.Application

If pjApp Is Nothing Then
MsgBox "Project is not installed"
End
End If

pjApp.Visible = True
AppActivate "Microsoft Project"

Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Filters.Clear
fd.Filters.Add "Microsoft Project Files", "*.mpp"
fd.AllowMultiSelect = False
fd.Show
If (fd.SelectedItems.Count = 0) Then
    'Application.GetOpenFilename("Microsoft Project Files (*.mpp), *.mpp")
    pjApp.Quit
    Set pjApp = Nothing
    Exit Sub
End If

pjApp.FileOpen fd.SelectedItems(1)
Debug.Print "Project_Task_Name~CustomField"

Dim ass As Assignment
For Each Project_Task In pjApp.ActiveProject.Tasks
            If Not Project_Task Is Nothing Then

                For Each ass In Project_Task.Assignments
                    assignCFVal = assignCFVal & "," & ass.VBATestField '<<PROBLEM Line
                Next ass

               Debug.Print Project_Task.Name & "~" & assignCFVal
               assignCFVal = ""
            End If
        Next Project_Task

pjApp.FileClose pjDoNotSave
pjApp.Quit
Set pjApp = Nothing

End Sub

1 Ответ

0 голосов
/ 18 августа 2011

Оказывается, мне не нужно использовать объект Assignments для этого. Метод SetField вернул бы то, что мне нужно, как показано ниже;

For Each Project_Task In pjApp.ActiveProject.Tasks
            If Not Project_Task Is Nothing Then
              assignCFVal = Project_Task.SetField(FieldNameToFieldConstant("VBATestField"))
              Debug.Print Project_Task.Name & "~" & assignCFVal
            End If
Next Project_Task
...