如何在 MPP VBA 中创建自定义日历并计算两个日期之间的工作日差异?
How to create a customized calendar in MPP VBA and take a work day difference between 2 dates?
有什么方法可以在 Microsoft Project 中 duplicate/create VBA 中的日历(或从 MPP 日历中读取),然后使用该日历计算两个日期之间的工作日差异(持续时间)?
如果您的日历是标准日历(例如,每周工作 5 天,从周一到周五),您可以创建自己的函数,例如:
Function Workdays(Start_Date As Date, End_Date As Date) AS Integer
Dim Temp_Delta As Integer, X As Integer, Y As Integer
Temp_Delta = End_Date - Start_Date
Temp_Delta = 5 * (Temp_Delta \ 7)
X = Weekday(End_Date, vbMonday)
Y = Weekday(Start_Date, vbMonday)
If X > 5 Then X = 5
If Y > 5 Then Y = 5
Temp_Delta = Temp_Delta + X - Y
Workdays = Temp_Delta
End Function
Microsoft Project 有一个函数 DateDifference
,它接受三个参数:开始日期、完成日期和 Calendar。您需要将日历对象传递给它,而不是日历的字符串名称。 return 值是工作分钟数,因此除以适当的数量得到小时数,通常是 480(8 小时 * 60 分钟)。
例如,这会根据项目日历为您提供 12 月的工作日数。
Application.DateDifference("12/1/17","12/31/17", ActiveProject.Calendar) / 480
这是相关的 MSDN 文章。
有什么方法可以在 Microsoft Project 中 duplicate/create VBA 中的日历(或从 MPP 日历中读取),然后使用该日历计算两个日期之间的工作日差异(持续时间)?
如果您的日历是标准日历(例如,每周工作 5 天,从周一到周五),您可以创建自己的函数,例如:
Function Workdays(Start_Date As Date, End_Date As Date) AS Integer
Dim Temp_Delta As Integer, X As Integer, Y As Integer
Temp_Delta = End_Date - Start_Date
Temp_Delta = 5 * (Temp_Delta \ 7)
X = Weekday(End_Date, vbMonday)
Y = Weekday(Start_Date, vbMonday)
If X > 5 Then X = 5
If Y > 5 Then Y = 5
Temp_Delta = Temp_Delta + X - Y
Workdays = Temp_Delta
End Function
Microsoft Project 有一个函数 DateDifference
,它接受三个参数:开始日期、完成日期和 Calendar。您需要将日历对象传递给它,而不是日历的字符串名称。 return 值是工作分钟数,因此除以适当的数量得到小时数,通常是 480(8 小时 * 60 分钟)。
例如,这会根据项目日历为您提供 12 月的工作日数。
Application.DateDifference("12/1/17","12/31/17", ActiveProject.Calendar) / 480
这是相关的 MSDN 文章。