Ошибка выполнения 1100 при попытке "SelectAll" в ProjApp_ProjectBeforeTaskChange (внутри модуля класса)
Цель: я пытаюсь сохранить все задачи UniqueID
, а также Text5
значения до Change
событие происходит.
Поэтому у меня есть модуль класса clsTskUpdate
где я пытаюсь сохранить все эти значения внутри Dictionary
в ProjApp_ProjectBeforeTaskChange
событие.
Однако, поскольку у меня есть мастер-проект и несколько подпроектов, мне нужно SelectAll
задачи, и цикл ActiveSelection.Tasks
чтобы получить их UniqueID
внутри Мастер-проекта (благодаря помощи @Rachel Hettinger).
Проблема начинается, что всякий раз, когда я изменяю значение ActualFinish
из поля со списком (как показано на снимке экрана ниже):
Я получаю ошибку во время выполнения "1100":
Метод недоступен в этой ситуации
На следующей строке (внутри Sub ProjApp_ProjectBeforeTaskChange
)
SelectAll
Кто-нибудь здесь знает, как справиться с этим? Как я могу использовать SelectAll
перед обновлением задачи это значения, чтобы сохранить все текущие значения в моем Dictionary
?
Класс clsTskUpdate Code
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
1 ответ
Если вы хотите просто сохранить значение Text5 до изменения задачи (для любого поля), попробуйте следующее:
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
tsk.UniqueID
будет уникальным значением в главном проекте (например, 8388611, а не 3).