如何使用 MS Project 宏将项目信息从 Excel 拉入 MS Project
How to pull Project info from Excel into MS Project, using a MS Project macro
我在 MS Project 中工作,并尝试使用宏将项目信息从电子表格导入 MS Project。到目前为止,我所拥有的可以很好地从电子表格中导入任务信息。我还想导入企业自定义字段项目信息,如项目部门——您将在“项目信息”对话框中看到的信息。我 是 能够使用 ProjectSummaryTask.SetField
将硬编码信息传递到这些字段,如下所示:
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Project Departments", pjProject), Value:="Analytics"
但我不知道如何访问实际的 Excel 电子表格并引用其中包含我需要的信息的单元格,这样我就可以使用包含该信息的变量来代替文本 ( “分析”)在上面的例子中。
到目前为止我所拥有的全部内容是:
Sub Import()
MapEdit Name:="Map ", Create:=True, OverwriteExisting:=True, DataCategory:=0, CategoryEnabled:=True, _
TableName:="Cleaned", FieldName:="Name", ExternalFieldName:="Summary", ExportFilter:="All Tasks", ImportMethod:=0, _
HeaderRow:=True, AssignmentData:=False, TextDelimiter:=Chr$(9), TextFileOrigin:=0, UseHtmlTemplate:=False, IncludeImage:=False
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Outline Level", ExternalFieldName:="Outline_Level"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Created", ExternalFieldName:="Created"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Start", ExternalFieldName:="Start_date"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Finish", ExternalFieldName:="Finish"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="% Complete", ExternalFieldName:="%_Complete"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Notes", ExternalFieldName:="Notes_w_Comments"
FileOpenEx Name:="Mypath\Project Import Prep.xlsx", _
ReadOnly:=False, Merge:=0, FormatID:="MSProject.ACE.14", map:="Map ", DoNotLoadFromEnterprise:=True
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Project Departments", pjProject), Value:="Analytics"
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Customer", pjProject), Value:="OA"
End Sub
一切正常,但我想使用变量而不是硬代码自动填充电子表格中的项目部门和客户字段。
我需要做什么才能启用和使用电子表格内容作为变量?你至少能给我指出正确的方向吗?
我为寻找答案做了很多挖掘,但到目前为止我发现的所有内容都是在 Excel 而不是 MS Project 中工作。
这是您可以从 Project 中 运行 自动执行 Excel 并从工作中获取值的代码sheet:
Sub GetValuesFromExcel()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Dim wbk As Excel.Workbook
Set wbk = xl.Workbooks.Open("C:\...\<filename>.xlsx", UpdateLinks:=False, ReadOnly:=True)
Dim Dept As String
Dim Customer As String
Dept = wbk.Worksheets("Sheet1").Range("A2")
Customer = wbk.Worksheets("Sheet1").Range("B2")
wbk.Close False
xl.Quit
ActiveProject.ProjectSummaryTask.SetField FieldNameToFieldConstant("Project Departments"), Dept
ActiveProject.ProjectSummaryTask.SetField FieldNameToFieldConstant("Customer"), Customer
End Sub
此代码使用早期绑定到 Excel 对象库,因此您需要设置对该文件的引用(工具菜单:引用,选中 Microsoft Excel 对象库的复选框).
当然还有更新文件名、sheet 名称和范围引用。
我在 MS Project 中工作,并尝试使用宏将项目信息从电子表格导入 MS Project。到目前为止,我所拥有的可以很好地从电子表格中导入任务信息。我还想导入企业自定义字段项目信息,如项目部门——您将在“项目信息”对话框中看到的信息。我 是 能够使用 ProjectSummaryTask.SetField
将硬编码信息传递到这些字段,如下所示:
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Project Departments", pjProject), Value:="Analytics"
但我不知道如何访问实际的 Excel 电子表格并引用其中包含我需要的信息的单元格,这样我就可以使用包含该信息的变量来代替文本 ( “分析”)在上面的例子中。
到目前为止我所拥有的全部内容是:
Sub Import()
MapEdit Name:="Map ", Create:=True, OverwriteExisting:=True, DataCategory:=0, CategoryEnabled:=True, _
TableName:="Cleaned", FieldName:="Name", ExternalFieldName:="Summary", ExportFilter:="All Tasks", ImportMethod:=0, _
HeaderRow:=True, AssignmentData:=False, TextDelimiter:=Chr$(9), TextFileOrigin:=0, UseHtmlTemplate:=False, IncludeImage:=False
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Outline Level", ExternalFieldName:="Outline_Level"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Created", ExternalFieldName:="Created"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Start", ExternalFieldName:="Start_date"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Finish", ExternalFieldName:="Finish"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="% Complete", ExternalFieldName:="%_Complete"
MapEdit Name:="Map ", DataCategory:=0, FieldName:="Notes", ExternalFieldName:="Notes_w_Comments"
FileOpenEx Name:="Mypath\Project Import Prep.xlsx", _
ReadOnly:=False, Merge:=0, FormatID:="MSProject.ACE.14", map:="Map ", DoNotLoadFromEnterprise:=True
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Project Departments", pjProject), Value:="Analytics"
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Customer", pjProject), Value:="OA"
End Sub
一切正常,但我想使用变量而不是硬代码自动填充电子表格中的项目部门和客户字段。
我需要做什么才能启用和使用电子表格内容作为变量?你至少能给我指出正确的方向吗?
我为寻找答案做了很多挖掘,但到目前为止我发现的所有内容都是在 Excel 而不是 MS Project 中工作。
这是您可以从 Project 中 运行 自动执行 Excel 并从工作中获取值的代码sheet:
Sub GetValuesFromExcel()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Dim wbk As Excel.Workbook
Set wbk = xl.Workbooks.Open("C:\...\<filename>.xlsx", UpdateLinks:=False, ReadOnly:=True)
Dim Dept As String
Dim Customer As String
Dept = wbk.Worksheets("Sheet1").Range("A2")
Customer = wbk.Worksheets("Sheet1").Range("B2")
wbk.Close False
xl.Quit
ActiveProject.ProjectSummaryTask.SetField FieldNameToFieldConstant("Project Departments"), Dept
ActiveProject.ProjectSummaryTask.SetField FieldNameToFieldConstant("Customer"), Customer
End Sub
此代码使用早期绑定到 Excel 对象库,因此您需要设置对该文件的引用(工具菜单:引用,选中 Microsoft Excel 对象库的复选框).
当然还有更新文件名、sheet 名称和范围引用。