我在MS Project中开发了一个自定义应用程序。当它正在执行其中一个功能时,它会跳过一部分代码,导致输出错误。下面是导致错误并强制应用程序向前跳过的代码行。任何人都知道可能导致它的原因吗?
FilterEdit Name:="fCriteria", TaskFilter:=True, Create:=True, _
OverwriteExisting:=True, FieldName:="Flag20", test:="equals", _
Value:="No", ShowInMenu:=False, ShowSummaryTasks:=True
这是整个子例程
If keepCriteriaCount > 0 And globRemProducts = True Then
Application.ScreenUpdating = False
WindowActivate WindowName:=globNewWindow
TableApply Name:="Master Template"
FilterApply Name:="All Tasks"
Application.SetAutoFilter FieldName:="Flag20", FilterType:=pjAutoFilterClear
SelectSheet
SetTaskField Field:="Flag20", Value:="No"
SelectTaskField Row:=0, Column:="Flag20", Height:=0
EditCopy
SelectTaskColumn Column:="Flag20"
FillDown
keepCriteriaArray() = Split(keepCriteria, ",")
fCount = 0
'Remove Tasks for excluded Products
For dCriteria = LBound(keepCriteriaArray) To UBound(keepCriteriaArray)
If Not keepCriteriaArray(dCriteria) = "" Then
If Len(Trim(keepCriteriaArray(dCriteria))) = 2 Then
projChannels = Trim(keepCriteriaArray(dCriteria)) & ","
Else
projChannels = Trim(keepCriteriaArray(dCriteria))
End If
If fCount = 0 Then
FilterEdit Name:="fCriteria", TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:="Text24", test:="contains", Value:=projChannels, ShowInMenu:=False, ShowSummaryTasks:=False
FilterEdit Name:="fCriteria", TaskFilter:=True, FieldName:="", NewFieldName:="Text24", test:="contains", Value:="All", Operation:="OR", ShowSummaryTasks:=False
fCount = fCount + 1
Else
projChannels = Trim(keepCriteriaArray(dCriteria))
FilterEdit Name:="fCriteria", TaskFilter:=True, FieldName:="", NewFieldName:="Text24", test:="contains", Value:=projChannels, Operation:="OR", ShowSummaryTasks:=False
End If
End If
Next dCriteria
FilterApply Name:="fCriteria" ' apply the filter
SelectSheet
tCount = ActiveSelection.Tasks.Count
SelectSheet
SetTaskField Field:="Flag20", Value:="Yes"
SelectTaskField Row:=0, Column:="Flag20", Height:=0
EditCopy
SelectTaskColumn Column:="Flag20"
FillDown
FilterApply Name:="All Tasks"
Application.SetAutoFilter FieldName:="Flag20", FilterType:=pjAutoFilterClear
If addCriteriaCount = 0 Then
tCriteria = projChannels & "; " & globStoreChannels & "; " & txtCustType.Value
Else
tCriteria = addCriteria & ", " & projChannels & "; " & globStoreChannels & "; " & txtCustType.Value
End If
'WindowActivate WindowName:=globNewWindow
TableApply Name:="Master Template"
tskHeaderRow = 1
SelectTaskField Row:=tskHeaderRow, Column:="Text4"
SetTaskField Field:="Text4", Value:=tCriteria
'before you delete - outdent all tasks
SelectSheet
For rLevel = ActiveSelection.Tasks.Count To 1 Step -1
SelectTaskField Row:=rLevel, Column:="Name", RowRelative:=False
OutlineOutdent
OutlineOutdent
OutlineOutdent
OutlineOutdent
Next rLevel
'If Not ActiveProject.AutoFilter Then Application.AutoFilter
'Group
On Error Resume Next
'Application.SetAutoFilter FieldName:="Flag20", FilterType:=pjAutoFilterCustom, Test1:="contains", Criteria1:="No"
FilterEdit Name:="fCriteria", TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:="Flag20", test:="equals", Value:="No", ShowInMenu:=False, ShowSummaryTasks:=True
FilterApply Name:="fCriteria" ' apply the filter
SelectSheet
On Error GoTo removeErr
If ActiveSelection.Tasks.Count >= 1 Then
SelectSheet
EditDelete
End If
答案 0 :(得分:0)
这并不像你希望的那样有用......对不起......
原因是"跳过"是因为你正在进行错误处理的方式。 On Error Resume Next
正在屏蔽所有相关信息。现在,您可以通过在攻击行之后直接添加Debug.Print err.number: Debug.Print err.description
之类的内容,让您的程序在此处为您提供更多信息,但这只会将您的错误放入日志中。它只会帮助你使用一行,即使你的错误忽略部分中有多行代码。如果你一直在看你的日志,所有这一切都很好,但是当我使用Project时,我很少有时间搞乱它。我认为你是一样的。
现在,如果我不得不猜测问题(我当前的机器上没有安装Project,我目前的合同都没有让我使用Gannt图表。我知道,你应该同情我),我想我记得Create:=True, OverwriteExisting:=True
是多余的,您可以删除覆盖部分,以防即使在应用了所有任务后仍然使用fCriteria。或者,也许不是编辑和覆盖相同的过滤器,而是创建fCriteria1,fCriteria2等。您仍然可以像过去一样复制过滤器,并且在清理代码期间可以.delete
过滤器,所以没有残留的混乱。
我不知道这些选项中的任何一个是否有用,但是在尝试调试时它们会帮助我。