根据上面两次知识的铺垫,大家对VBA如何在EXCEL中划线有了一个初步的了解,今天就拿大家经常用到的工作计划,来看看用VBA如何自动生成一张计划甘特图的,全程自动划线,无需手动参与,快来动手体验一下吧!1、先构建一张数据表,模版如下,标题依次为任务名称、任务类型、开始时间、结束时间、开始日期所在列,结束日期所在列,后面为日期序列 。=MATCH(C2,$A$1:$P$1,0)
可以得到任务1的开始时间对应的日期在第7列,即G列
在F2中输入公式:
=MATCH(D2,$A$1:$P$1,0)
可以得到任务1的结束时间对应的日期在第8列,即H列
下拉E2和F2的公式,到最后一行得到如下表格;
好了,表格的准备工作已经完成,现在VBA开始出场了!
3、按ALT+F11,打开VBA编辑窗口,插入模块,将下面的VBA代码复制到窗口中
Sub 画甘特图()
Dim SHP As Shape
ActiveSheet.Shapes.SelectAll '选中当前工作表所有图形
Selection.Delete '删除所有选中图形
T = Cells(Rows.Count, 1).End(xlUp).Row '最后一行行号
For I = 2 To T
S = Cells(I, 5) '开始日期所在列
F = Cells(I, 6) '结束日期所在列
X0 = Cells(I, S).Left '开始点横坐标
Y0 = Cells(I, S).Top + Cells(I, S).Height / 2 '开始点纵坐标
X1 = Cells(I, F).Left + Cells(I, F).Width '终点横坐标
Y1 = Y0 '终点纵坐标
Set SHP = ActiveSheet.Shapes.AddLine(X0, Y0, X1, Y1) '画甘特图
If Cells(I, 2) = "关键" Then
SHP.Line.ForeColor.RGB = rgbRed ' 关键任务为红色
Else
SHP.Line.ForeColor.RGB = rgbBlue ' 其它任务为蓝色
End If
SHP.Line.Weight = 2 '设置线宽
Next
End Sub
4、鼠标放在代码内,点击运行或F5,你将得到一张堪称完美的线表甘特图,如下图所示:
5、总结:原理很简单
运行前先删除所有图形,进行初始化
核心命令只有一条ActiveSheet.Shapes.AddLine(X0, Y0, X1, Y1)
坐标:根据公式,计算出开始和结束日期所在的单元格,再根据所在单元格的坐标+偏移量计算出坐标值
判断是否关键任务对甘特图颜色进行调整
注意:任务更新后,线表不会自动更新,需要重新运行VBA进行更新!
6、灵魂拷问,欢迎评论区讨论,如果后面不是按天,而是按月,阁下将如何应对?