我有一个为MS Project开发的自定义应用程序。当它执行其中一个函数时,它会跳过一部分代码,导致输出不正确。以下是导致错误并强制应用程序跳过的代码行。任何人都知道可能是什么造成的?部分代码(VBA)被跳过
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
我不熟悉MS Project,但我有很多编码经验。通常,对于类似“跳过”的内容,查看更多上下文(更多代码)很重要。您可以使用问题下方的[编辑]链接添加更多代码。 –
当你说跳过,这是否意味着你有一些错误陷阱说这是方式或它调试,你移动它? –
有一行代码写入,如果发生错误,它会将其发送到下一个例程 – BLUMan