如何在VBA MS Project中获取单元格的值

问题描述 投票:0回答:1

我需要一个代码,该代码根据项目中某些特定单元格的不同值给出消息,我已经在Excel中使用了VBA,但从未在Project中使用过VBA,所以我不知道该怎么做

[我在VBA Excel中编写了代码,该代码执行了与Project中相同的操作,但是我需要代码,但带有Project的信息,但是我在Excel中使用的功能未在Project中定义,所以我不知道如何添加代码

Option Explicit
Private Sub Avance()
Dim PtjR As Double
Dim PtjP As Double
Dim FechaRI As Date
Dim FechaRF As Date
Dim FechaPI As Date
Dim FechaPF As Date
Dim ListaT As String
Dim i As Integer
Dim ListaTT As String


For i = 3 To 40

        FechaPI = Round(Cells(i, 2).Value, 2)
        FechaPF = Cells(i, 3).Value
        FechaRI = Cells(i, 4).Value
        FechaRF = Cells(i, 5).Value
        PtjR = Round(Cells(i, 6).Value, 2)
        PtjP = Round(Cells(i, 7).Value, 2)

        If PtjR < PtjP Then

                ListaT = ListaT & vbNewLine & Chr(13) & "La tarea" & " " & Cells(i, 1).Value & " " & "se encuentra en DELATE, lleva" & " " & PtjR * 100 & "% y debería llevar" & " " & PtjP * 100 & "%"

                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

Next i

MsgBox ListaT, vbCritical, "Advertencia"



End Sub

我不确定代码的唯一改变方式是如何获取单元格的值,但是知道如何做将对您有很大帮助

vba ms-project
1个回答
0
投票

要获取任务的值,请使用Task对象。在这种情况下,您需要使用Tasks对象(所有任务的集合)循环浏览所有任务。尚不清楚您需要哪些任务字段,但这应该可以帮助您入门:

Private Sub Avance()

Dim PtjR As Double
Dim PtjP As Double
Dim FechaRI As Date
Dim FechaRF As Date
Dim FechaPI As Date
Dim FechaPF As Date
Dim ListaT As String
Dim t As Task

For Each t In ActiveProject.Tasks

    FechaPI = t.Start
    FechaPF = t.Finish
    FechaRI = IIf(t.BaselineStart = "NA", 0, t.BaselineStart)
    FechaRF = IIf(t.BaselineFinish = "NA", 0, t.BaselineFinish)
    PtjR = t.PercentComplete
    PtjP = t.PhysicalPercentComplete

    If PtjR < PtjP Then

        ListaT = ListaT & vbNewLine & Chr(13) & "La tarea" & " " & t.Name & " " & "se encuentra en DELATE, lleva" & " " & PtjR * 100 & "% y debería llevar" & " " & PtjP * 100 & "%"

        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

Next t

MsgBox ListaT, vbCritical, "Advertencia"

End Sub

请注意,Percent CompletePhysical Percent Complete属性返回的值为0到100,所以以后不要乘以100。

© www.soinside.com 2019 - 2024. All rights reserved.