2016-04-25 13 views
0

私はMS Projectで開発されたカスタムアプリケーションを持っています。関数の1つを実行しているときに、コードの一部がスキップされ、結果が正しく出力されません。以下は、エラーを引き起こし、アプリケーションを先にスキップさせるコード行です。誰でもそれを引き起こす可能性があることを知っていますか?ここでコード部分(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 
+0

私はMS Projectに精通していませんが、多くのコーディング経験があります。通常、「スキップする」のようなものでは、より多くのコンテキスト(より多くのコード)を見ることが重要です。質問の下にある[編集]リンクを使用して、コードを追加できます。 –

+0

あなたがスキップしたと言うとき、これはあなたがそれが道だと言っているトラップを持っていることを意味するのでしょうか、それともデバッグして、それを動かすのでしょうか? –

+0

エラーがあれば、次のルーチンに送信するコード行があります – BLUMan

答えて

0

ですあなたのエラー処理のやり方が原因です。 On Error Resume Nextはすべての関連情報をマスクしています。今、攻撃行の後に直接Debug.Print err.number: Debug.Print err.descriptionのようなものを追加することで、あなたのプログラムがあなたにもっと多くの情報を与えることができます。しかし、それはあなたのエラーをログに入れます。そして、あなたはあなたの 'エラー無視セクションの中に複数の行があるにもかかわらず、1行だけであなたを助けるでしょう。いつもあなたのログを見ているなら、これはうまくいきますが、私がProjectを使っているときは、あまりにも時間がありません。私はあなたが同じだと思います。

今、問題を推測しなければならない場合(私の現在のマシンにProjectをインストールしていないと、私の現在の契約のどれもGanntチャートを使用しないと思っています。 Create:=True, OverwriteExisting:=Trueは冗長で、すべてのタスクが適用された後でもfCriteriaが使用されている場合にのみ上書き部分を削除できます。または、同じフィルタを編集して上書きするのではなく、fCriteria1、fCriteria2などを作成してください。フィルタをコピーすることはできますが、コードをクリーンアップするときに最後にフィルタを使用することができます(.delete)。

これらのオプションのどちらかが役立つかどうかわかりませんが、デバッグしようとすると助けになります。

関連する問題