如何通过VB从Excel创建带日历与文件名设置的MS Project文件
通过VB从Excel创建带自定义设置的MS Project文件
核心解决点
1. 指定生成的Project文件名
创建Project实例后,通过SaveAs方法直接指定保存路径和文件名,避免默认命名。
2. 配置日历参数
可修改标准日历,或创建自定义日历,设置工作时间、例外日期等规则。
完整VBA代码示例
首先需在Excel VBA编辑器中,通过工具→引用勾选Microsoft Project xx.x Object Library(对应你的Project版本)。
Sub CreateCustomProject() Dim projApp As MSProject.Application Dim newProj As MSProject.Project Dim projCal As MSProject.Calendar ' 创建Project应用实例(后台运行可加Visible:=False) Set projApp = New MSProject.Application projApp.Visible = True ' 新建空白项目 Set newProj = projApp.Projects.Add ' -------------------------- ' 1. 指定文件名并保存 ' -------------------------- Dim savePath As String savePath = "C:\YourFolder\自定义项目名称.mpp" ' 替换为实际路径 newProj.SaveAs savePath ' -------------------------- ' 2. 配置日历参数(示例:修改标准日历) ' -------------------------- Set projCal = newProj.Calendars("标准") ' 设置工作日工作时间(周一至周五:9:00-12:00,13:30-18:00) With projCal.WeekDays(pjMonday) .Shift1.Start = #9:00:00 AM# .Shift1.Finish = #12:00:00 PM# .Shift2.Start = #1:30:00 PM# .Shift2.Finish = #6:00:00 PM# End With ' 复制周一设置到周二至周五 projCal.WeekDays(pjTuesday) = projCal.WeekDays(pjMonday) projCal.WeekDays(pjWednesday) = projCal.WeekDays(pjMonday) projCal.WeekDays(pjThursday) = projCal.WeekDays(pjMonday) projCal.WeekDays(pjFriday) = projCal.WeekDays(pjMonday) ' 添加日历例外(比如国庆节放假) Dim calException As MSProject.CalendarException Set calException = projCal.Exceptions.Add(Name:="国庆节", Start:=#10/1/2024#, Finish:=#10/7/2024#) calException.DayWorking = False ' 设置为非工作日 ' -------------------------- ' 可选:导入Excel数据(按需添加) ' -------------------------- ' newProj.Tasks.Add Name:="任务1" ' newProj.Tasks(1).Start = Date ' newProj.Tasks(1).Duration = "5d" ' 保存更改并退出 newProj.Save projApp.Quit ' 释放对象 Set calException = Nothing Set projCal = Nothing Set newProj = Nothing Set projApp = Nothing End Sub
关键说明
- 如果需要创建自定义日历而非修改标准日历,可使用
projCal = newProj.Calendars.Add(Name:="自定义工作日历") - 若要后台静默生成,把
projApp.Visible = True改为False - 路径需确保文件夹存在,否则会报错,可提前用
Dir函数判断并创建文件夹
内容的提问来源于stack exchange,提问作者Виктор Попов
相关产品推荐
相关产品推荐

