尝试" SelectAll"运行时错误1100在ProjApp_ProjectBeforeTaskChange中(在类模块内)

时间:2017-06-21 10:50:58

标签: vba ms-project microsoft-project-vba

目标:我想在UniqueID事件发生之前保存所有任务的Text5Change值。

因此,我有一个类模块clsTskUpdate,我尝试将所有这些值保存在Dictionary事件的ProjApp_ProjectBeforeTaskChange内。

但是,因为我有一个Master-Project和几个子项目,我需要SelectAll个任务,然后循环ActiveSelection.Tasks来获取他们的{{1}在Master-Project内部(感谢@Rachel Hettinger的帮助)。

问题一开始,每当我从组合框中修改UniqueID的值时(如下面的屏幕截图所示):

enter image description here

我收到运行时错误' 1100':

  

此方法无法使用此方法

在以下行(ActualFinish内)

Sub ProjApp_ProjectBeforeTaskChange

有谁在这里知道如何处理它?如何在任务更新任务之前使用SelectAll 来保存我SelectAll中的所有当前值?

类clsTskUpdate 代码

Dictionary

此项目代码

Option Explicit

Public WithEvents ProjApp   As Application

Private Sub ProjApp_ProjectBeforeTaskChange(ByVal Tsk As Task, ByVal Field As PjField, ByVal NewVal As Variant, Cancel As Boolean)

RowIDChanged = Tsk.UniqueID
MsgBox Application.StatusBar
SaveStatusforAllTasks ' call SaveStatusforAllTasks Sub, which saves current status of Text5 ("Status") of all tasks

End Sub

'===================================================================
Sub SaveStatusforAllTasks()

Dim AllTasks As Tasks
Dim Tsk As Task

' ****** Get Error 1100 at the line below *****
SelectAll
Set AllTasks = ActiveSelection.Tasks

' add existing values of UniqueID and Text5 to Dictionary object
Set Dict = CreateObject("Scripting.Dictionary")

For Each Tsk In AllTasks
    If Not Tsk Is Nothing Then
        If Not Dict.exists(Tsk.UniqueID) Then
            Dict.Add Tsk.UniqueID, Tsk.Text5
        End If
    End If
Next Tsk

End Sub

常规模块代码

Private Sub Project_Change(ByVal pj As Project)

StatusRYGFieldUpdate

End Sub

1 个答案:

答案 0 :(得分:1)

如果您希望在任务更改之前保存Text5的值(对于任何字段),请尝试以下操作:

RewriteMap

Private Sub ProjApp_ProjectBeforeTaskChange(ByVal tsk As Task, ByVal Field As PjField, _ ByVal NewVal As Variant, Cancel As Boolean) If Not dict.Exists(tsk.UniqueID) Then dict.Add tsk.UniqueID, tsk.Text5 Else dict(tsk.UniqueID) = tsk.Text5 End If End Sub 将是主项目中的唯一值(例如8388611,而不是3)。