说说如何在 Excel 中构建类似 Microsoft Project 中的任务层级结构

Microsoft Project的任务列表一般情况下都会具有层级结构,即大任务分解为小任务,点击“收缩”按钮,就可以把觉得太长的子任务列表收缩起来。形如:

如果直接导出,那么这些大小任务都在一列展示,不仅看不出关系,而且还没有伸缩功能。这时就要用到 VBA 在 Excel 中实现类似的功能。

VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言2

首先我们需要任务之间的层级关系数据。Microsoft Project 中的“大纲级别”字段描述的就是任务之间的层级关系:

我们可以先将“大纲级别”字段与其他数据字段一并导出到 Excel 中:

接着按ALT+F11 进入VBA编辑器,选择插入模块:

输入如下代码:


Sub 分级显示()

Dim i

i = 2

On Error Resume Next

Do While Cells(i, 1).Value <> ""

Rows(i).OutlineLevel = Cells(i, 1).Value

Cells(i, 2).IndentLevel = Cells(i, 1) - 1

i = i + 1

Loop

End Sub

我们来分析一下这段代码:

  • 首先使用Dim来声明变量和分配存储空间3

  • On Error Resume Next 表示程序出现错误时,直接跳到下一条语句;

  • 接着从 Excel的第二行开始,通过 Cells(i,1) 方法取出大纲级别数据。Cells(x,y) 表示取出第 x 行、第 y 列所对应单元格内的内容;

  • 然后使用Rows(i).OutlineLevel 来指定本行的大纲层级4

  • 接着使用 Cells(i, 2).IndentLevel 来指定第二列单元格的缩进量5,如果是第一级则不进行缩进;

indent ɪnˈdent;

To start a line of print or writing further away from the edge of the page than the other lines.

接着点击左上角的绿色箭头按钮,然后在弹出的“宏”对方框中点击“运行”按钮:

然后关闭 VBA 编辑器。接着再点击“数据”标签内的“分级显示”设置图标:

取消勾选“明细数据的下方”:

这样就把“分级显示”框放到了明细数据的上方咯:

左上角还有一排的层级号,点击相应的层级号,可以按照该层级进行收缩操作:


参考资料:
【1】 VBA (Visual Basic宏语言)
【2】Dim 语句.
【3】Range.OutlineLevel 屬性 (Excel).
【4】IndentLevel 属性 (Excel).
【5】从PROJECT导出到EXCEL中的任务如何快速分级.

你可能感兴趣的:(说说如何在 Excel 中构建类似 Microsoft Project 中的任务层级结构)