如何用VBA为MS Project Online企业版添加企业日历例外?
答:可以通过VBA给MS Project Online企业版的企业日历添加例外,以下是调整方案
核心说明
MS Project Online的企业日历存储在企业全局模板中,而非本地项目的基准日历或资源日历,你现有标准版的脚本需要针对性修改,才能操作企业级日历。
调整后的VBA脚本(批量添加10年公共假期)
这个脚本会连接到Project Online,打开企业全局模板,指定目标企业日历,批量生成10年的常见公共假期(可根据需求修改假期规则):
Sub AddEnterpriseCalendarExceptions() Dim pwaUrl As String Dim enterpriseGlobal As Project Dim enterpriseCal As Calendar Dim startYear As Integer, endYear As Integer Dim holidayDate As Date Dim y As Integer ' 替换为你的Project Online地址 pwaUrl = "https://your-pwa-url.sharepoint.com/sites/pwa" ' 连接并签出企业全局模板 Set enterpriseGlobal = Application.EnterpriseCheckOutGlobal If enterpriseGlobal Is Nothing Then MsgBox "无法打开企业全局模板,请检查权限或PWA地址" Exit Sub End If ' 指定要修改的企业日历名称(替换为实际名称) On Error Resume Next Set enterpriseCal = enterpriseGlobal.BaseCalendars("企业标准日历") On Error GoTo 0 If enterpriseCal Is Nothing Then MsgBox "未找到指定的企业日历" Application.EnterpriseCheckInGlobal True ' 签回模板 Exit Sub End If ' 设置10年的年份范围 startYear = Year(Date) endYear = startYear + 9 ' 批量添加固定日期假期(示例:元旦、圣诞节) For y = startYear To endYear ' 元旦(1月1日) holidayDate = DateSerial(y, 1, 1) enterpriseCal.Exceptions.Add Type:=1, Start:=holidayDate, Finish:=holidayDate, Name:="元旦" ' 圣诞节(12月25日) holidayDate = DateSerial(y, 12, 25) enterpriseCal.Exceptions.Add Type:=1, Start:=holidayDate, Finish:=holidayDate, Name:="圣诞节" ' 可继续添加其他固定假期,比如劳动节、国庆节 ' holidayDate = DateSerial(y, 5, 1) ' enterpriseCal.Exceptions.Add Type:=1, Start:=holidayDate, Finish:=holidayDate, Name:="劳动节" Next y ' 签回并保存全局模板更改 Application.EnterpriseCheckInGlobal True MsgBox "已成功添加10年公共假期到企业日历" End Sub
关键注意事项
- 权限要求:执行脚本的账号需要拥有Project Online的企业全局模板编辑权限(通常为管理员或指定的全局编辑用户)。
- 日历名称:务必替换脚本中的
"企业标准日历"为你实际要修改的企业日历名称。 - 浮动假期处理:如果有日期不固定的假期(如复活节、中秋节),需要额外编写日期计算逻辑后再添加。
- 测试建议:先在测试环境验证脚本,确认无误后再操作生产环境。
原有脚本的适配说明
你原本的标准版脚本针对的是本地项目的资源日历或基准日历,在企业版中操作企业级日历必须通过EnterpriseCheckOutGlobal打开全局模板,而非直接操作ActiveProject对象。
内容的提问来源于stack exchange,提问作者Joe Bloggs
相关产品推荐
相关产品推荐

