2017-09-15 3 views
-1

私は、アカウントごとにどれくらいの義務を負っているのか、いくつかのアカウントを持っているお客様のために実行しているという報告があります。このマクロは、1つの口座番号でソートし、その口座番号に関連するすべての行を取得し、それを切り取り、別のシートに貼り付けます。そして、すべての口座が別々のシートに収まるまでこれを続けます。だから、:彼らは何かを負いませんので私のVBAでエラーが発生した場合、次の手順に移動するにはどうすればよいですか?

Sub findsort() 

    Dim ws As Worksheet 

    Set ws = Worksheets("Sheet1") 

    Dim rng As Range 
    With ws 
    .UsedRange.AutoFilter Field:=2, Criteria1:="905539971" 


    Set rng = Intersect(.UsedRange, 
    .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible) 

    rng.Copy Worksheets(Sheets.Count).Range("A2") 
    rng.EntireRow.Delete 

    .UsedRange.AutoFilter 

    End With 

    Sheets("Sheet1").Select 
    Rows("1:1").Select 
    Selection.Copy 
    Worksheets(Sheets.Count).Select 
    Range("A1").Select 
    ActiveSheet.Paste 
    Cells.Select 
    Cells.EntireColumn.AutoFit 
    Cells.EntireColumn.AutoFit 
    Cells.EntireColumn.AutoFit 
    Range("A1").Select 


    Range("A1:O1").Select 
    Application.CutCopyMode = False 
    Selection.AutoFilter 
    Worksheets(Sheets.Count).Name = "ROCKTENN CP LLC (3PL)" 
    Sheets("Sheet1").Select 

    Sheets.Add After:=Sheets(Sheets.Count) 

    With ws 
    .UsedRange.AutoFilter Field:=2, Criteria1:="905135784" 


    Set rng = Intersect(.UsedRange, 
    .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible) 

    rng.Copy Worksheets(Sheets.Count).Range("A2") 
    rng.EntireRow.Delete 

    .UsedRange.AutoFilter 

    End With 

    Sheets("Sheet1").Select 
    Rows("1:1").Select 
    Selection.Copy 
    Worksheets(Sheets.Count).Select 
    Range("A1").Select 
    ActiveSheet.Paste 
    Cells.Select 
    Cells.EntireColumn.AutoFit 
    Cells.EntireColumn.AutoFit 
    Cells.EntireColumn.AutoFit 
    Range("A1").Select 


    Range("A1:O1").Select 
    Application.CutCopyMode = False 
    Selection.AutoFilter 
    Worksheets(Sheets.Count).Name = "ROCK-TENN RECYCLING (3PL)" 
    Sheets("Sheet1").Select 
End Sub 

問題が時々いないすべてのアカウントはそう「905539971」用のマクロ検索であれば、そのないが表示され、マクロがエラーを取得します。

私の質問は、次の1つに移動するためにそのアカウント番号が見つからない場合は、VBA内でこれらの各プロシージャをネストする必要がありますか?もしそうなら、そのコードは何でしょうか?

答えて

1

アカウントの存在をテストしてから、フィルタを適用する前にテストすることができます。下記参照。

With ws 

    If Not Intersect(.UsedRange,.Columns(2)).Find("905539971", lookat:=xlWhole) Is Nothing Then 

     .UsedRange.AutoFilter Field:=2, Criteria1:="905539971" 

     Set rng = Intersect(.UsedRange, 
      .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible) 

     rng.Copy Worksheets(Sheets.Count).Range("A2") 
     rng.EntireRow.Delete 

     .UsedRange.AutoFilter 

    End If 

End With 
関連する問題