Цель. Я пытаюсь сохранить все значения UniqueID
и Text5
задачи до того, как произойдет событие Change
.
Поэтому у меня есть модуль класса clsTskUpdate
, где я пытаюсь сохранить все эти значения внутри события Dictionary
в ProjApp_ProjectBeforeTaskChange
.
Однако, поскольку у меня есть мастер-проект и несколько подпроектов, мне нужно SelectAll
задач и прокрутить ActiveSelection.Tasks
, чтобы получить их UniqueID
внутри мастер-проекта (спасибо за помощь @Rachel Хеттингер).
Проблема начинается с того, что всякий раз, когда я изменяю значение ActualFinish
из поля со списком (как показано на снимке экрана ниже):
Я получаю ошибку времени выполнения «1100»:
Метод недоступен в данной ситуации
В следующей строке (внутри Sub ProjApp_ProjectBeforeTaskChange
)
SelectAll
Кто-нибудь здесь знает, как с этим справиться? Как я могу использовать SelectAll
до того, как задача обновит свои значения, чтобы сохранить все текущие значения в моем Dictionary
?
Код класса clsTskUpdate
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
Код обычного модуля
Option Explicit
Public StatusRYGView As New clsTskUpdate
Public RowIDChanged As Long
Public Const myDateFormat As String = "dd/mm/yy"
Public Dict As Object ' use a Dictionary to save previous values of all UniqueID and Text5 values ("Status")
Sub StatusRYGFieldUpdate()
Set StatusRYGView.ProjApp = Application
PaneClose ' should close the Split window (to make sure run-time error 1100 won't happen
Application.Calculation = pjManual
Application.ScreenUpdating = False
If UpdateViewFlag Then
FormatModifiedTasks ' call FormatModifiedTasks Sub, which updates all tasks that Text5 ("Status") were modified
End If
Application.Calculation = pjAutomatic
Application.ScreenUpdating = True
End Sub