Как получить значение ячейки в VBA MS Project - PullRequest
0 голосов
/ 23 октября 2019

Мне нужен код, который выдает сообщение в зависимости от различных значений некоторых конкретных ячеек в проекте, я уже использовал VBA в Excel, но никогда в Project, поэтому я не знаю, как это сделать

Я сделал код в VBA Excel, который делает то же самое, что мне нужно сделать в 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

Я не уверен, что способ, которым я получаю значения ячеек, является единственным, что изменится в коде, но зная, каксделать это, будет большая помощь

1 Ответ

0 голосов
/ 23 октября 2019

Чтобы получить значения задачи, используйте объект 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 Complete и Physical Percent Complete возвращают значениеот 0 до 100, поэтому не умножайте на 100 позже.

...