Vba 我需要在保存项目时运行代码
我已经用Workbook_BeforSave在excel中编写了这段代码,它可以工作,但在Project中我不知道如何做,因为它的工作方式不同。我只需要在保存项目时运行代码Vba 我需要在保存项目时运行代码,vba,ms-project,Vba,Ms Project,我已经用Workbook_BeforSave在excel中编写了这段代码,它可以工作,但在Project中我不知道如何做,因为它的工作方式不同。我只需要在保存项目时运行代码 Private子工作簿\u Open() 作为整数的Dim PtjR 作为整数的Dim PtjP Dim FechaRI作为日期 Dim-FechaRF作为变异体 Dim FechaPI作为日期 Dim FechaPF作为日期 作为字符串的Dim ListaT 作为字符串的Dim ListaTT 调暗t作为任务 对于Act
Private子工作簿\u Open()
作为整数的Dim PtjR
作为整数的Dim PtjP
Dim FechaRI作为日期
Dim-FechaRF作为变异体
Dim FechaPI作为日期
Dim FechaPF作为日期
作为字符串的Dim ListaT
作为字符串的Dim ListaTT
调暗t作为任务
对于ActiveProject.Tasks中的每个t
如果t.Text1=“Subtarea”,则
FechaPI=日期值(t.Start)
FechaPF=日期值(t.Finish)
PtjR=t完成百分比
PtjP=Round((日期值(现在)-FechaPI)/(FechaPF-FechaPI),2)*100
如果PtjP>=100,则
PtjP=100
如果PtjP小于0,则
PtjP=0
其他的
PtjP=Round((日期值(现在)-FechaPI)/(FechaPF-FechaPI),2)*100
如果结束
如果PtjR ElseIf FechaPF-DateValue(Now)MS项目事件的工作方式与Excel中的相同。尝试项目事件或项目事件
在VB编辑器中,打开ThisProject
的模块,从代码窗口顶部的左下拉列表中选择Project
,然后从右下拉列表中选择要使用的事件。它将为事件处理程序创建过程;在那里添加您的代码。如果代码太复杂,对我来说就行了,如果代码在我打开项目时运行,文件
Private Sub Workbook_Open()
Dim PtjR As Integer
Dim PtjP As Integer
Dim FechaRI As Date
Dim FechaRF As Variant
Dim FechaPI As Date
Dim FechaPF As Date
Dim ListaT As String
Dim ListaTT As String
Dim t As Task
For Each t In ActiveProject.Tasks
If t.Text1 = "Subtarea" Then
FechaPI = DateValue(t.Start)
FechaPF = DateValue(t.Finish)
PtjR = t.PercentComplete
PtjP = Round((DateValue(Now) - FechaPI) / (FechaPF - FechaPI), 2) * 100
If PtjP >= 100 Then
PtjP = 100
ElseIf PtjP < 0 Then
PtjP = 0
Else
PtjP = Round((DateValue(Now) - FechaPI) / (FechaPF - FechaPI), 2) * 100
End If
If PtjR < PtjP Then
ListaT = ListaT & vbNewLine & vbNewLine & "La tarea " & t.Name & " se encuentra en DELATE, lleva " & PtjR & "% y debería llevar" & " " & PtjP & "%."
If FechaPF - DateValue(Now) < 0 Then
ListaT = ListaT & ". Esta tarea debió terminar hace " & -(FechaPF - DateValue(Now)) & " días."
ElseIf FechaPF - DateValue(Now) <= 7 Then
ListaT = ListaT & ". Esta tarea termina en " & FechaPF - DateValue(Now) & " días."
End If
End If
Else
End If
Next t
MsgBox ListaT, vbCritical, "Advertencia"
End Sub