【问题标题】:How to pull Project info from Excel into MS Project, using a MS Project macro如何使用 MS Project 宏将项目信息从 Excel 提取到 MS Project
【发布时间】:2021-06-20 08:01:27
【问题描述】:

我在 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 中工作的。

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    您可以在 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 对象库的复选框)。

    当然还要更新文件名、工作表名称和范围引用。

    【讨论】:

    • 非常感谢@Rachel。这正是我启动和运行所需要的。
    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2014-08-16
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多