使用MS Project每行创建1个电子表格


1

我想创建一个脚本,为MS项目计划中的每个选定行创建一组电子表格,1。这比我看到的“导出函数”更复杂,因为导出函数将MS-Project文件视为表,并执行表到表的转换。

这是我想要的功能:

  • 能够选择一组任务 在MS-Project中触发 功能
  • 具有该功能从任务中取3-5个选定的项目并放入 他们在一个特定的地方 Excel电子表格。
  • 理想情况下,它会让我给它一个模板电子表格,字符串代表我想要数据去的地方。
  • 电子表格将有多个标签,我想在多个标签中设置数据。
  • 每个任务都在自己的文件中获取一个新的电子表格。

我很高兴写一个函数来做这个,但我不熟悉任何MS宏编程语言或技巧。我可以很容易地想象出我想要的伪代码,我只是不知道是否有那些可以做我想要的API。

有没有人想过我想要的是否可能,如果是的话,如何最好地接近它。如果可能,请包括对学习资源的引用。

Answers:


1

是的,这是可能的,但对于新的宏编程人员来说可能很多。由于您正在尝试同时使用excel和项目,因此复杂性有所增加 - 但它完全可以完成。

没有API已经为你做了这个收缩包装,但是MS Office非常丰富 文档对象模型 。您拥有的最佳资源之一就是“F1”键。尝试以非常小的步骤记录您想要执行的操作,并修改代码以使其适当通用。录音机可以帮助您发现您熟悉的对象,方法和属性。

Project中的主要工作对象是 任务 宾语。在Excel中它是 范围 宾语。你需要熟悉两者来做你想做的事。粗略轮廓:

  1. 从项目中选定的任务开始
  2. 对于您选择的每项任务:
    一个。创建一个新的工作簿
    湾从项目中获取所需的值
    C。将它们写入excel中的适当范围

我在你的问题的模板部分有点模糊,所以在下面的例子中没有担心,但你可以定义一个名为a的东西 命名范围 在excel中。因此,这些名称可以存在于您的模板中,如果您愿意,您甚至可以在多个工作表(选项卡)上重复使用相同的名称,并使用这些名称来定义写入您的taks数据的位置。例如,我写了任务ID Range("A2"),但也可能 Range("Project_ID")

另外,我建议将其分解为几个函数,一个用于大纲中的每一步。这里有一个 非常 基本出发点。要使用此示例,您需要从Project创建对Excel对象定义的引用。打开项目VBA IDE并选择 工具 - >参考 。找到条目 Microsoft Excel XX.0对象库 并勾选复选框。 'XX'是你的excel版本。我是10,你的miight会有所不同。使用它的任何人都必须做出相同的选择。

Option Explicit

Sub CopyTasksToExcel()
    Dim xlApp As Excel.Application
    Dim t As Task
    Dim wb As Excel.Workbook

    Set xlApp = New Excel.Application

    For Each t In ActiveSelection.Tasks
        Set wb = CreateWorkbook(xlApp, t.Name, t.ID)
        WriteSheetHeadingOn wb
        WriteTaskOn t, wb
        wb.Close SaveChanges:=True
    Next t

    xlApp.Quit
    Set xlApp = Nothing
End Sub

Function CreateWorkbook(ByVal xlApp As Excel.Application, _
                        ByVal TaskName As String, _
                        ByVal TaskID As Long) As Excel.Workbook
    Dim wb As Excel.Workbook
    Dim fName As String


    Set wb = xlApp.Workbooks.Add            'You could specify a template here
    fName = ActiveProject.Path & "\" _
                               & TaskID & "-" _
                               & TaskName & ".xls"
    wb.SaveAs FileName:=fName

    Set CreateWorkbook = wb
    Set wb = Nothing
End Function

'Writes date from a Project Task to the provided workbook.
Sub WriteTaskOn(ByVal prjTask As Task, _
                ByVal xlWb As Excel.Workbook)
    With xlWb.Sheets(1)
        .Range("A2").Value = prjTask.ID
        .Range("B2").Value = prjTask.Name
        .Range("C2").Value = prjTask.Duration
    End With
End Sub


Sub WriteSheetHeadingOn(ByVal xlWb As Excel.Workbook)
    With xlWb.Sheets(1)
        .Range("A1").Value = "ID"
        .Range("B1").Value = "Name"
        .Range("C1").Value = "Duration"
    End With
End Sub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.