我正在MS Project中工作,并尝试使用宏将项目信息从电子表格导入MS Project。到目前为止,我所做的工作可以很好地从电子表格中导入Task信息。我还想导入企业自定义字段项目信息,如项目部门,即您在"项目信息"对话框中看到的信息。我能够使用ProjectSummaryTask.SetField
将硬编码信息传递到这些字段,如下所示:
ActiveProject.ProjectSummaryTask.SetField FieldID:=FieldNameToFieldConstant("Project Departments", pjProject), Value:="Analytics"
但我不知道如何访问实际的Excel电子表格并引用包含我需要的信息的单元格,这样我就可以使用一个包含这些信息的变量来代替上面例子中的文本("Analytics"(。
到目前为止,我所拥有的全部是:
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:="MypathProject 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并从工作表中获取值:
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对象库复选框(。
当然,还要更新文件名、图纸名称和范围引用。