目标:我想在UniqueID
事件发生之前保存所有任务的Text5
和Change
值。
因此,我有一个类模块clsTskUpdate
,我尝试将所有这些值保存在Dictionary
事件的ProjApp_ProjectBeforeTaskChange
内。
但是,因为我有一个Master-Project和几个子项目,我需要SelectAll
个任务,然后循环ActiveSelection.Tasks
来获取他们的{{1}在Master-Project内部(感谢@Rachel Hettinger的帮助)。
问题一开始,每当我从组合框中修改UniqueID
的值时(如下面的屏幕截图所示):
我收到运行时错误' 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
答案 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)。