2011-08-18 3 views
0

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

Я хотел бы получить список задач проекта и значение, присвоенное настраиваемому полю, как это;

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 

ответ

0

Оказалось, что для этого мне не нужно использовать объект 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 
Смежные вопросы