高级过滤器在一个案例中复制但在另一个案例中失败?

时间:2015-03-13 21:12:33

标签: vba excel-vba excel-2007 excel

我有一个高级过滤器,其标准如下:

Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Range(ClntName), CopyToRange:=Range("AA2"), unique:=True

它工作得很好。它复制标题和数据 但在下一个案例中,我没有以下标准:

Range("F2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
SiteRange = "F2:" & "F" & Lastrow
Range(SiteRange).AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("AB2"), Unique:=True
Range("AB2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
SiteData = "AB2:" & "AB" & Lastrow

它只复制来自F2的标题,并将其放在AB2上。如果我检查SiteRange它显示Range(F2:F518),那么有数据要复制。 另一方面,如果您选中SiteData,则只显示Range(AB2:AB2) 我肯定错过了什么;任何人都可以帮忙解决这个问题吗?

我已经减少了程序,只显示高级过滤器,并说明它们似乎有选择地工作。我知道这是我的编程,但希望它能让你更容易看到问题。代码如下:

Option Explicit

Sub Scheduling()
 Dim NewSheet As Worksheet, NameSheet As Worksheet, ws As Worksheet
 Dim cell As Object
 Dim SheetRange As String
 Dim ClientRange As String
 Dim ClntCrit As String
 Dim ClntName As String
 Dim ClientCcs As String
 Dim SiteRange As String
 Dim StaffRange As String
 Dim CodeRange As String
 Dim Lastrow As Long

 ActiveWorkbook.Sheets("Schedules").Activate
 Set NameSheet = Sheets("Schedules")

 Application.ScreenUpdating = False

   Range("$BE$2").Select
   Selection.Value = "Client Name"
   Range("$BE$3").Select
   Selection.Value = "*-ccs*"
   Range("$BF$2").Select
   Selection.Value = "Client Name"
   Range("$BF$3").Select
   Selection.Value = "<>*-ccs*"
   Range("$BG$2").Select
   Selection.Value = "Client Name"
   Range("B2").Select
   Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
   ClientRange = "B2:" & "B" & Lastrow
   Range("F2").Select
   Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
   SiteRange = "F2:" & "F" & Lastrow
   Range("G2").Select
   Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
   StaffRange = "G2:" & "G" & Lastrow
   Range("H2").Select
   Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
   CodeRange = "H2:" & "H" & Lastrow
   Range("$BF$2").Select
   ClntName = "$BF$2:$BF$3"
   Range("$BE$2").Select
   ClntCrit = "$BE$2:$BE$3"
   Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
   CriteriaRange:=Range(ClntCrit), CopyToRange:=Range("$BG$2"),
   unique:=True
   Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
   CriteriaRange:=Range(ClntName), CopyToRange:=Range("AA2"),
   unique:=True
   Range(SiteRange).AdvancedFilter Action:=xlFilterCopy,
   CopyToRange:=Range("AB2"), unique:=True
   Range(StaffRange).AdvancedFilter Action:=xlFilterCopy, 
   CopyToRange:=Range("AC2"), unique:=True
   Range(CodeRange).AdvancedFilter Action:=xlFilterCopy,
   CopyToRange:=Range("AD2"), unique:=True
 End Sub

前两个带标准的高级过滤器工作得很好。接下来的三个高级过滤器仅返回标题。

希望有人会在这种安排中看到冲突的位置,因为它应该有效。

2 个答案:

答案 0 :(得分:0)

我认为你应该为'Range'指定'SHEET reference'

答案 1 :(得分:0)

我想我找到了解决方案。今天晚些时候我将在完整的程序上运行它,但现在这个工作:

我将没有条件的高级过滤器移动到高级过滤器标准之上,换句话说,首先运行没有标准的高级过滤器,结果是:

所有高级过滤器都将相应的范围复制到相应的范围,没有任何问题。

我将不得不阅读这些高级过滤器,毫无疑问,我会发现必须按特定顺序运行它们吗?