Vba 我需要在保存项目时运行代码

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

我已经用Workbook_BeforSave在excel中编写了这段代码,它可以工作,但在Project中我不知道如何做,因为它的工作方式不同。我只需要在保存项目时运行代码


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
如果结束
如果PtjRElseIf 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