使用VBA返回MS Project中活动单元上方任务中的值

时间:2018-10-18 13:06:22

标签: vba ms-project

我熟悉Excel中的VBA,并且我一生都无法解决如何使用VBA返回MS Project中activecell之上的值。在Excel中,我只会使用诸如activecell.offset(-1,0).value之类的东西。

在下面的代码中(我错误地)使用了OFFSET,因此需要一些可以替换该代码的东西才能使我的宏正常工作。

当Text4列中的值更改为下一个任务(否则缩进)时,代码将尝试添加新的任务摘要。

提前谢谢!

Sub Add_Task_Summaries()
'Add a Summary Task when the text in the Learning Path column changes and 
indent otherwise
Dim T As Task
Dim LP As String
Dim RowNo As Long
Dim TU As Integer

For Each T In ActiveProject.Tasks

If T.Text4 <> "" And T.Summary = False Then
    If T.Text4 = T.Text4.Offset(-1, 0) Then 'INCORRECT SYNTAX
        T.OutlineIndent
    ElseIf T.Text4 <> T.Text4.Offset(-1, 0) Then 'INCORRECT SYNTAX
        LP = T.Text4
        T.Add Name:=LP, before:=ActiveSelection.Tasks
    End If
End If
Next T

End Sub

1 个答案:

答案 0 :(得分:0)

您可以通过使用Application对象的各种Select方法(例如SelectCellDownSelectCellRightSelectBeginning)在MS Project中选择单元格。但是,您也可以使用如下方法:

Sub Add_Task_Summaries()
    'Add a Summary Task when the text in the Learning Path column changes
    'and indent otherwise

    Dim T As Task
    Dim S As Task
    Dim LP As String

    For Each T In ActiveProject.Tasks
        If T.Text4 > "" And Not T.Summary Then
            If LP <> T.Text4 Then
                LP = T.Text4
                Set S = ActiveProject.Tasks.Add(LP & " - Summary", T.ID)
                S.OutlineLevel = T.OutlineLevel
            End If
            T.OutlineIndent
        End If
    Next T

End Sub