【问题标题】:How to get the value of a cell in VBA MS Project如何在 VBA MS Project 中获取单元格的值
【发布时间】:2019-10-24 03:49:14
【问题描述】:

我需要一个代码来根据项目中某些特定单元格的不同值给出消息,我已经在 Excel 中使用过 VBA,但从未在 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

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

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    要获取任务的值,请使用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。

    【讨论】:

    • 我做了你告诉我的改变,但我不能让它工作,我收到一个错误消息号 438,它说:对象不支持这个属性或方法
    • 哪一行导致错误?顺便说一句:此代码旨在在 MS Project 中运行,而不是 Excel。
    • 我已经成功了!非常感谢你。我认为错误是因为我用西班牙语编写任务,但代码只能用英语识别它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多