Ошибка выполнения 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).

Другие вопросы по тегам