2017-03-18 45 views
1
Sub filterData() 
    Dim filterCriteria As String 
    x = 1 
    Do While Not IsEmpty(filterCriteria) 
     filterCriteria = (Sheets("Lists").Cells(x, 2)) 
     Sheets(filterCriteria).Select 
     Sheets(filterCriteria).Cells.Clear 

     Range("A1") = "Date" 
     Range("B1") = "Item" 
     Range("C1") = "Category" 
     Range("D1") = "Quantity" 
     Range("E1") = "Rate" 
     Range("F1") = "Total" 
     Range("A1:F1").Font.Bold = True 
     Range("A1:F1").Font.ColorIndex = 5 
     Sheets("BookEntry").Select 
     Dim lastRow As Long 

     lastRow = Sheets("BookEntry").Cells.Find(What:="*", _ 
     After:=Range("A1"), _ 
     LookAt:=xlPart, _ 
     LookIn:=xlFormulas, _ 
     SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious, _ 
     MatchCase:=False).row 
     Dim lastColumn As Long 

     lastColumn = Sheets("BookEntry").Cells.Find(What:="*", _ 
     After:=Range("A1"), _ 
     LookAt:=xlPart, _ 
     LookIn:=xlFormulas, _ 
     SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlPrevious, _ 
     MatchCase:=False).Column 

     Sheets("BookEntry").Range(Cells(1, 1), Cells(lastRow, lastColumn)).AutoFilter Field:=3, Criteria1:=filterCriteria 
     Sheets("BookEntry").Range(Cells(2, 1), Cells(lastRow, lastColumn)).Copy 
     Sheets(filterCriteria).Select 
     erow = Sheets(filterCriteria).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).row 

     Sheets(filterCriteria).Paste Destination:=Worksheets(filterCriteria).Rows(erow) 
     Sheets("BookEntry").Select 
     Sheets("BookEntry").Range(Cells(1, 1), Cells(lastRow, lastColumn)).AutoFilter Field:=3 
     ActiveWorkbook.Save 
     x = x + 1 
    Loop 
End Sub 

回答

2

你犯了两个错误。

1-您在分配前检查filterCriteria

2-若要检查空的filterCriteria,应该检查字符串是否为Len(Trim(filterCriteria)) > 0,否则应该声明该变量为变体,因为IsEmpty适用于变体。但字符串选项更好。

改变循环的结构到这一点:

x = 1 
Dim filterCriteria As String 
filterCriteria = Sheets("Lists").Cells(x, 2).value 

Do While Len(Trim(filterCriteria)) > 0 
    ... 
    ... 
    x = x + 1 
    filterCriteria = Sheets("Lists").Cells(x, 2).value 
Loop 

也尽量get rid of those .Select stuff

+0

哇,这真是太快了!感谢您的帮助A.S.H.我会尽我所能来实施你的建议。如果我能够实现这个目标,我该如何标记这个解决方案? – user252391

+0

@ user252391欢迎您。 –

+0

太棒了!这是完美的。我有点明白你的意思,但如果你可以评论我的原代码,这对我学习会非常有帮助。此外,我不知道如何删除.Select的东西。我的代码仍然可以运行吗? – user252391

相关问题