2017-09-15 1 views
-1

저는 각 계정에 대해 얼마만큼의 빚을 지는지 여러 계정을 가진 고객을 위해 실행하는 보고서가 있습니다. 이 매크로는 하나의 계정 번호별로 정렬하고 해당 계정 번호에 속하는 모든 행을 가져 와서 잘라내어 다른 시트에 붙여 넣습니다. 그리고 모든 계좌가 별도의 용지에 보관 될 때까지이 작업을 계속합니다. 그래서 "905539971"그들은 아무것도 빚을하지 않기 때문에 그것 거기, 매크로 오류를 얻을 수에 대한 매크로를 검색하면내 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 

문제는 때때로는 모든 계정은 이렇게 표시됩니다.

그래서 내 질문은, 내가 다음 계정으로 이동하기 위해 계정 번호를 찾지 못한다면 알려주는 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 
관련 문제